Java/Theory

[Java/Theory]03. Datatype

양승길 2016. 5. 30. 12:52

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