기본 콘텐츠로 건너뛰기

0.04 Data type

Data type


1. primitive
2. reference
3. variable declaration & variable assignment
4. casting


1. primitive (8가지)

 - 논리형
 - 문자형
 - 정수형
 - 실수형

예) boolean boo = true;
 - 변수 boo를 boolean이라는 data type으로 선언
 - true값을 변수 boo에 대입
 ※ 3. 변수 선언, 변수 할당 참고

2. reference (기본형에 해당하지 않는 모든 타입은 참조 변수에 해당)

예) String[] args : args의 data type은 String = String[] 종류의 것을 담겠다


3. variable declaration & variable assignment

예) int i =73;
 - i라고 하는 변수를 int라는 데이터 타입으로 선언
 - 73을 i에 대입

4. casting

형변환의 기본


예) byte b1 = 10; - b1의 data type은 byte (1byte짜리)
     byte b2 = 20;
     byte b3 = b1 + b2;           → 에러가 발생

 - 에러가 발생하는 이유?
  : 자바에서 내부적으로 연산시 정수형 기본 타입인 int로 변환하여 계산함

 - 해결?: 명시적 형변환으로
    byte b4 = (byte)(b1 + b2);


예) double d1 = 100+0.5;
 - d1변수를 data type double로 선언하고 100+0.5 값을 d1에 대입
 - d1을 출력하면 100.5 (정수형과 실수형의 연산: double은 8byte, int는 4byte)
 - 묵시적 형변환: 정수형, 실수형에서 data type이 큰 쪽으로 변환

예) Casting2.java

public class  Casting2{  //class 이름과 파일 이름은 동일해야함
 
    public static void main(String[] args){  //자바는 main method로 시작
 
        //1. b1의 데이터 타입은 byte로 선언
        //2. 100을 b1에 대입
        byte b1 = 100;      
 
        //3. 20을 변수 b2에 대입
        byte b2 = 20;
 
        //byte b3 = b1+b2;  
        // b1, b2는 데이터 타입이 byte 지만 java 내부적으로 계산될 때 기본은 int값으로 이루어진다 따라서 데이터 타입이 다르기때문에 에러 발생
        // byte b4 = (byte)b1+b2; 
        //b1은 byte타입임을 명시했지만 b2는 int값으로 그대로 계산 따라서 byte + int는 int로 묵시적 형변환 = 결국 데이터 타입이 달라서 에러 발생
        
        byte b5 = (byte)(b1+b2);
        System.out.println("b5: "+b5);
 
        byte b6 = (byte)(b1+b5);
        System.out.println("b6: "+b6);  // b1+b5 = 220이므로 byte 타입이 표현할 수 있는 -128~127의 값에 해당이 되지 않으므로 쓰레기 값이 도출됨
 
        System.out.println("===================================");
 
        int i1 = b1+b2;
        System.out.println("i1: "+i1);  //120
 
        int i2 = b1+b5;
        System.out.println("i2: "+i2);  //b1, b2, b5는 데이터 타입이 byte지만 자바 내부에서 계산은 int타입으로 이루어진다 - 그걸 int 타입으로 선언한 i1, i2에 대입하는 건 문제가 없다 - 묵시적 형변환
 
                                        //220
 
        int i3 = i1+b5;
        System.out.println("i3: "+i3);  //int타입인 i1과 byte타입인 b5가 연산을 하면 묵시적 형변환의 특성상 데이터 타입이 큰 int 타입으로 자연스럽게 계산이 이루어짐(자바 내부 정수형 기본 타입이 int라는 것도 생각하자)
 
                                        //240
        
        System.out.println("===================================");
 
        double d1 = 133 + 0.3;
        System.out.println("d1: "+d1);  // int타입인 133 + double타입(실수형 기본타입은 double) 0.3을 계산 - 데이터 타입이 더 큰 double로 계산 - 묵시적 형변환
 
        // int i4 = 143.4;    //데이터 타입이 달라서 에러 발생
        // System.out.println("i4: "+i4);
 
        int i5 = 200/3;
        System.out.println("i5: "+i5); //200/3은 66.6666....이지만 자바 내부에서 계산하는 정수형은 int값으로 산출된다. (소숫점 이하 자리는 날아감)
 
         double d2 = 200/3;
        System.out.println("d2: "+d2); // 66을 double로 선언된 d2에 넣으면 원래 나와야 하는 소숫점 .666...이 되살아 나는 것이 아니라 실수형으로 표현될 뿐이다 (데이터 손실)
 
        double d3 = (double)200/3;
        System.out.println("d3: "+d3);
 
        double d4 = (double)(200/3);
        System.out.println("d4: "+d4); //200/3을 먼저 연산 - 66이 산출(int값이 기본형이므로) 그 후에 double로 데이터 타입을 표현해 봐야 소숫점 아래 값은 형식적으로 표현하게 됨
 
 }// end of main
}// end of class
cs