3. Datatype
프로그램의 언어에서 해당 데이터들을 종류에 따라 처리하기 위해 분류된 것.
각 종류와 고유의 메모리 크기마다 표현하는 객체.
Primitive Datatype과 Reference Datatype으로 분류가 된다.
- Primitive Datatype
* 크게 정수, 실수, 문자, 논리로 분류되며 이들 마다 데이터의 크기는 다르다.
* 정수 : byte(1 byte), short(2 byte), int(4 byte), long(8 byte)로 분류되며 default type은 int다.
* 실수 : float(4 byte), double(8 byte)로 분류되며 default byte은 double이다.
* 문자 : char(2byte)
* 논리 : boolean(1 bit)
(long은 000l 또는 000L로 int와 구별하고 float은 0.0f 또는 0.0F로 double과 구별한다.)
- Reference Datatype
* Primitive Datatype을 제외한 모든 Datatype
- Casting
* 하나의 Datatype을 다른 Datatype으로 변환하는 행위다.
* Casting없이 Datatype을 서로 할당 할 수 없다.
* Implicit Casting : 내부적 변환.
크기가 작은 Datatype이 큰 Datatype으로 변환은 묵시적으로 시행된다.
* Explicit Casting : 크기가 큰 Datatype이 작은 Datatype으로 변환은
사용자가 ()연산자를 통해 직접 Cast해야 된다.
(Cast된 Data는 허용된 크기를 벗어나 쓰레기 값이 반환될 수 있으므로 주의를 한다.)
* +, -, *, /, %의 연산자는 int type로 연산되어 결과를 반환한다.
* Ex 1 :
1 2 3 4 5 6 7 8 9 10 11 12 | byte b1 = 100, b2 = 30; byte b3 = b1 + b2; // + 연산자가 int형에 해당되므로 b1, b2는 int type으로 Implicit Cast된다. // 그러므로 Compile Error가 발생된다. 따라서 Explicit Cast해야 된다. byte b4 = (byte)(b1 + b2); // 위와 같이 하면 byte로 변환되나 byte에 있는 제한 범위에 벗어나 쓰레기 값이 출력된다. int i1 = b1 + b2; // b1 + b2가 연산된 결과는 int이므로 Implicit Cast된다. | cs |
* Ex 2 :
1 2 3 4 5 6 7 8 | double test1 = 100 + 0.5; // int type 100은 double로 Implicit Cast된다. int test2 = 100 + 0.5; // int보다 큰 double이 할당될 경우 Compile Error가 발생된다. 따라서 Explicit Cast해야 된다. int test2 = 100 + (int)0.5; | cs |
* Ex 3 :
1 2 3 4 5 6 | int i2 = 201/2; // 실제 결과는 100.5이지만 연산자가 int이기 때문에 결과가 100으로 Implicit Cast된다. double d1 = 201/2; // 실제 결과는 100.5이지만 연산자가 int이기 때문에 결과가 100으로 Implicit Cast된다. // 대입될 때 double이므로 100.0으로 Implicit Cast된다. | cs |
* Ex 4 :
1 2 3 | double d2 = (double)201/2 // int type 201을 double로 Explicit Cast하여 연산하였기 때문에 결과값과 대입되는 값 모두 100.5다. // Casting을 할 때는 Operator가 우선순위다. | cs |
'Java > Theory' 카테고리의 다른 글
[Java/Theory]06. OOP (0) | 2016.05.30 |
---|---|
[Java/Theory]05. Reference (0) | 2016.05.30 |
[Java/Theory]04. Operator, Condition, Array (0) | 2016.05.30 |
[Java/Theory]02. 환경변수 (0) | 2016.05.30 |
[Java/Theory]01. 개요 (0) | 2016.05.30 |