ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java 자바] 2. 변수와 타입 ② 데이터 타입, 타입 변환
    Programming/Java 2022. 7. 26. 20:39
    반응형

    변수와 타입 이전글: https://erinh.tistory.com/entry/Java-2-변수?category=1028392

     

    2-2. 데이터 타입 (Data Type)

    : 모든 변수에는 타입이 있으며, 타입에 따라 저장할 수 있는 값의 종류와 범위가 달라짐

    2-2-1. 기본(원시: primitive) 타입

    - 데이터 타입은 크게 기본타입과 참조타입으로 구분 (참조타입은 별도 포스팅에서 다룰 예정)

    값의 종류 기본 타입 메모리 사용 크기 초기값 저장되는 값 범위
    정수 byte 1 byte 8 bit 0 -128 ~ 127
    char 2 byte 16 bit \u0000 총 65,536개 문자 표현 가능
    short 2 byte 16 bit 0 -32,768 ~ 32,767
    int 4 byte 32 bit 0 -2,147,483,648 ~ 2,147,483,647 (약 21억)
    long 8 byte 64 bit 0 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    실수 float 4 byte 32 bit 0.0 소수 부분 6자리까지 표현 가능
    double 8 byte 64 bit 0.0 소수 부분 15자리까지 표현 가능
    논리 boolean 1 byte 8 bit false true, false

    2-2-2. 정수 타입 (byte, char, short, int, long)

    1) byte 타입 

    [ ❗️Syntax Alert] 실행 중 값의 범위를 초과하면 최소값부터 다시 반복 저장됨
    byte var1 = 126;
    
    for(int i = 0; i < 5; i++) {  		// 5번 동안 아래 코드 반복
    	var1++;				// var1 값에 1 더함
    	System.out.println(var1);	// var1 출력
    }
    
    // 127, -128, -127, -126, -125 출력됨

    2) char 타입

    - 자바는 모든 문자를 유니코드 타입으로 처리
    - char 타입은 하나의 유니코드를 저장하기 위한 데이터 타입 (음수가 없음)

    char c1 = 'A';			// char 타입은 (' ')를 사용하여 초기화 가능
    char c2 = 65; 			// 10진수로 저장
    char c3 = '\u0041'		// 16진수로 저장
    	
    int uniCode = c1;		// int 값에 char 저장해보기
    
    System.out.println(c1);		// A
    System.out.println(c2);		// A
    System.out.println(c3);		// A
    System.out.println(uniCode);	// 65(10진수 값으로 저장)

     

    [ ❗️Syntax Alert] char타입 변수에 ('')로 초기화를 할 경우, 컴파일 에러 발생
    char c = '';	// 컴파일 에러
    char c = ' ';	// 에러 없음
    
    // 참고) String 타입은 빈 문자 대입 가능
    String str = "";

    3) short 타입

    - C언어와의 호환을 위해 사용 (비교적 자바에서는 사용 하지 않음)

    4) int 타입

    - 약 21억까지의 정수 표현이 가능하며, 이 범위를 초과할 것으로 예상될 경우 long 타입 사용 필요

    5) long 타입

    - 수치가 큰 데이터를 다루는 프로그램에서 필수 사용(은행권, 우주 관련 프로그램)

    [ ❗️Syntax Alert] int 값을 초과하는 값 범위에는 숫자 뒤에 L을 반드시 붙여줘야 한다.
    long var1 = 10;
    long var2 = 20L;
    long var3 = 100000000000000;	// 컴파일 에러
    long var4 = 100000000000000L;

    2-2-3. 실수 타입 (float, double)

    - float와 double의 메모리 사용 크기는 각각 int, long과 같지만 저장 방식이 달라 훨씬 더 큰 범위의 값 저장 가능

    // 저장 가능한 범위의 값 비교
    byte < short < int < long < float < double

    - 실수 타입으로 저장되는 가수는 이진수로 나타낼 수 있는 가장 가까운 수여서 실제 정수값과 오차가 존재

    2-2-4. 논리 타입 (boolean)

    - 논리값(true/false)을 저장할 수 있는 데이터 타입
    - 주로 조건문과 제어문의 실행 흐름을 변경하는데 사용

    2-3. 타입 변환 (Type Conversion)

    : 특정 데이터 타입을 다른 데이터 타입으로 변환하는 것

    2-3-1. 자동 타입 변환 (묵시적 형변환, Implicit Conversion)

    - 연산에서 컴파일러가 자동으로 수행해주는 타입 변환 (데이터 손실이 최소화되는 방향)
    - 타입의 표현 범위에 따라 다음과 같은 방향으로 자동 타입 변환이 이루어짐

    byte → short → int → long → float → double
                   char↗
    int var1 = 10;
    double var2 = var1;
    System.out.println(var1);	// 10
    System.out.println(var2);	// 10.0 (int 변수 var1을 자동 형변환하여 저장)
    
    // 단, 음수값을 표현하지 못하는 char의 경우, byte -> char로 갈 때 자동형변환이 일어나지 않음
    byte var3 = 65;
    char var4 = var3; 		// 컴파일 에러

    2-3-2. 강제 타입 변환 (명시적 형변환, Explicit Conversion)

    - 큰 크기 타입을 작은 타입으로 변환할 때 타입 캐스트 연산자 () 를 사용하여 강제 수행

    double var1 = 3.14
    int var2 = (int) var1;
    System.out.println(var1);	// 3.14
    System.out.println(var2);	// 3 (자동으로 형변환)

    - 하지만, 강제 변환시 데이터 손실이 발생할 수 있음

    long var1 = 2_400_000_000L;
    int var2 = (int) var1;
    System.out.println(var1);	// 2400000000
    System.out.println(var2);	// -1894967296, 값 손실 발생

    - 타입 변환시, 변환될 타입의 최소값 최대값을 벗어나는지 반드시 검사하고 변환해야 함
    - 자바에서 제공되는 최대값, 최소값 상수를 통해 검증 가능

    기본 타입 최대값 상수 최소값 상수
    byte Byte.MAX_VALUE Byte.MIN_VALUE
    short Short.MAX_VALUE Short.MIN_VALUE
    int Integer.MAX_VALUE Integer.MIN_VALUE
    long Long.MAX_VALUE Long.MIN_VALUE
    float Float.MAX_VALUE Float.MIN_VALUE
    double Double.MAX_VALUE Double.MIN_VALUE

     

    반응형

    댓글

Designed by Tistory.