이번 시간에는 자료형이 대해서 알아보겠습니다. 자료형은 변수를 선언해주기전에 꼭 앞에 어떤 종류의 변수인지 구별해주는 역할을 합니다.
1. 자료형
- 변수의선언 방법: 변수의 자료형 변수형 (ex: int a;)
- 자료형은 기본형 8가지와 참조형 3가지로 이루어져 있습니다.
- 자료형의 기본형이란 stack에 바로 사용할 수 있는 값을 저장합니다.
- 자료형의 기본형은 선언과 동시에 메모리 할당이 이루어지므로 바로 사용이 가능합니다.
- 자료형의 참조형이란 heap이나 static(클래스 또는 메서드)영역의 메모리 주소를 저장합니다.
- 자료형의 참조형은 선언만으로 사용할 수없고 메모리를 할당 받아서 데이터를 조작하거나 다른 자료형의 주소를 대입받은 후 조작을 가해야 합니다.(new 연산자 이용)
- 값할당(초기화) 방법 : 변수명 = 값
- 할당받은 값은 변수명만으로도 사용이 가능합니다.
- 변수명은 한글로 선언이 가능하지만 일반적으로는 사용하지 않습니다.
2. 기본형과 참조형의 종류
<자료형의 기본형 종류>
구분 |
데이터형 |
크기(Byte) |
범위 |
정수 |
byte |
1 |
-27 ~ 27-1 |
short |
2 |
-215 ~ 215-1 |
|
int |
4 |
-231 ~ 231-1 |
|
long |
8 |
-263 ~ 263-1 |
|
문자형 |
char |
2 |
영문자 1자 'a' -> ASCII 0~65535 Java는 유니코드를 사용 함 |
실수형 |
float |
4 |
유효자리 7자리(정밀도) |
double |
8 |
유효자리 16자리(정밀도) |
|
불형 |
boolean |
1 |
true 또는 false |
<자료형의 참조형 종류>
- C언어에서 포인터와 유사한 개념으로 Class/Interface, String(문자열), Array(배열)이 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class Variable { public static void main(String args[]) { int a; // 정수형 int인 a선언 a = 10; // a의 값을 10으로 초기화 System.out.println("a = " + a); a= 20; // a의 값을 다시 20으로 초기화 System.out.println("a = " + a); System.out.println("a + a = " + (a+a)); int b = 30; // 정수형 int인 b선언하는 동시에 30으로 초기화 System.out.println("b = " + b); float f; // 실수형 float인 f선언 f = 0.123456789f; // f의 값을 0.123456789로 초기화 // 여기서 뒤에 f를 붙으는것은 명시적 표현으로 float형이 됩니다. System.out.println("f = " + f); double d; // 실수형 double인 d 선언 d = 0.12345678901234567; // d의 값을 0.12345678901234567로 초기화 // 여기서 float형보다 double형이 범위가 넓다는걸 알수 있습니다. System.out.println("d = " + d); } } | cs |
<결과>
<문자형 예제>
- 문자형을 표현하는 방법은 3가지가 있습니다.
(ASCII 코드 이용, UNICODE 이용, 문자 상수 직접대입)
- 문자형에는 제어문자라는 특별한 의미를갖는 문자가 있습니다.
\t: 탭 |
\n: 줄바꿈 |
\r: 첫칸으로 이동 |
\b: back space |
\f: 페이지 바꿈 |
\숫자: 8진수 |
\u숫자: 16진수 |
\\: \문자 |
\', \": ' 또는 "(출력문에 "또는' 쓰는법) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class Character { public static void main(String args[]) { char ch; // 문자형 char인 ch 변수선언 ch = 97; // char형에 숫자를 쓰면 아스키코드값 출력 System.out.println("ch = " + ch); ch = 'a'; // char형에 문자출력하려면 '문자' 쓰기 System.out.println("ch = " + ch); ch = '\u0061'; // 유니코드 값을 넣어 a값넣기 System.out.println("ch = " + ch); System.out.print("여기는 첫째 줄 "); System.out.print("입니다.\n"); System.out.println("여기는 둘째 줄 입니다."); System.out.print("국어\t영어\t수학\n"); System.out.println("----------------"); System.out.println("80\t50\t100"); } } | cs |
<결과>
<아스키코드표>
<유니코드 사이트>
https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_D000~DFFF
- char형 아스키코드와 문자에 관한 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class CharTest { public static void main(String args[]) { char ch = 'A'; // char형 ch변수 선언과동시에 'A' 초기화 System.out.println("ch = " + ch); // 'A' 출력 // 괄호안에 +는 연산이고 A는 아스키코드가 65이고 // 그 안에서 +1 연산을 하므로 66이 리턴되어 출력된다. System.out.println("ch + 1 = " + (ch + 1)); // char형 변수 ch1에 미리 A문자에 +1 되어 계산되므로 // 출력문에 변환 될 때는 A보다 아스키코드가 하나 큰 'B'가 나오게된다 char ch1 = 'A' + 1; System.out.println("ch + 1 = " + ch1); // char형에 숫자가 들어갈경우 아스키코드 숫자에 해당되는 문자가 출력된다. ch = 13; System.out.print("ASCII Code 13 = " + ch); System.out.print("한 줄이 떨어져서 출력 됩니다."); } } | cs |
<결과>
4. Overflow & UnderFlow
- Overflow : 데이터 타입이 저장할 수 있는 값의 범위를 초과한 경우로 가장 작은 숫자로 돌아가서 다시 올라가게 됩니다.
- Underflow : 데이터 타입이 저장할 수 있는 값의 범위보다 작은 값을 저장 한 경우로 가장 큰 숫자로 돌아가서 다시 내려가게 됩니다.
<예제>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class OverUnderflow { public static void main(String args[]) { // byte 범위는 -128 ~ 127 사이의 정수이다. byte num1 = 127; byte num2 = (byte)128; System.out.println("num1 = " + num1); System.out.println("num1 = " + num2); // 범위를 초과했기 때문에 오버플로우 num1 = -128; num2 = (byte)-129; System.out.println("num1 = " + num1); System.out.println("num1 = " + num2); // 범위보다 낮기 때문에 언더플로우 } } | cs |
<결과>
5. Type Casting(형변환)
- 형변환이란 변수 또는 상수의 값을 다른 타입으로 변환 하는것이다.
- 기본형은 기본형끼리 참조형은 참조형끼리만 형변환 가능하다.
- 기본형에서 boolean형만 형변환 불가능
- 참조형은 상속관계 클래스의 객체들 사이에서 형 변환을해서 사용 가능
- 자동 형 변환 : 형변환을 명시하지 않아도 형변환이 이루어 지는것
ex) byte b=10;
int a=20;
- a+b ==> int와 byte연산이므로 int로 형 변환이 일어난다.
<형변환 예제>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package DataType2; public class TypeCasting { public static void main(String args[]) { byte b = 100; // btye형 b 변수 100으로 초기화 short s = 1000; // short형 s 변수 1000으로 초기화 int i = 10000; // int형 i 변수 10000으로 초기화 long l = 10L; // long형 l 변수 10으로 초기화 char c = 'A'; // char형 c 변수 'A'로 초기화 float f = 3.14f; // float형 f 변수 3.14로 초기화 double db = 5.15d; // double형 db 변수 5.15로 초기화 boolean bo = true ; // boolean형 bo 변수 true로 초기화 System .out.println("b = " + b); System .out.println("s = " + s); System .out.println("i = " + i); System .out.println("l = " + l); System .out.println("c = " + c); System .out.println("f = " + f); System .out.println("db = " + db); System .out.println("bo = " + bo); f = (float)1.5; // 또는 f = 1.5f System .out.println("f = " + f); f = (float)db; // double값을 float형으로 System .out.println("f = " + f); } } | cs |
<결과>
- 지금까지 데이터 타입에 대해서 공부해 봤습니다. 이렇게 데이터 타입은 여러방법으로 쓰이고 있습니다. 다음 시간에는 연산자에 대해서 공부해 보겠습니다.
'조재연의 Java 개꿀떡 > 조재연의 Java 기초 개꿀떡' 카테고리의 다른 글
자바(Java)의 기초 박살내기 - 제어문(Control Statement) (0) | 2017.06.30 |
---|---|
자바(Java)의 기초 박살내기 - 연산자(Operator) (1) | 2017.06.30 |
자바(Java)의 기초 박살내기 - 이클립스(Eclipse) 단축키 (0) | 2017.06.29 |
자바(Java)의 기초 박살내기 - Java의 개요 (0) | 2017.06.28 |
자바(Java)의 기초 박살내기 - 이클립스(Eclipse) 배경 테마 및 폰트 변경 (0) | 2017.06.28 |