개발일지/Java

Java 타입

E-room 2022. 9. 4. 14:10
728x90

어떤 값의 유형 및 종류를 의미

 

타입에 따라 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식이 결정된다.

  • 값이 차지하는 메모리 공간의 크기
    • ex) 정수형 타입 : 4byte, 문자형 타입 : 1byte
  • 값이 저장되는 방식
    • 기본 타입 : 저장하고자 하는 값을 그대로 저장 : 정수 타입, 실수 타입, 문자 타입, 논리 타입
    • 참조 타임 : 저장하고자 하는 값을 임의의 메모리 공간에 저장한 후, 그 메모리 공간의 주소를 저장 : 기본을 제외한 나머지
public class Main {
    public static void main(String[] args) {
        int a = 1;
        String[] b = new String[3];

        System.out.println(a); // 1 출력
        System.out.println(b); // 주소값 출력
    }
}

정수 타입

타입 메모리 표현 범위
byte 1byte -128(-2^7) ~ 127(2^7 - 1)
short 2byte -32,768(-2^15) ~ 32,767(2^15 - 1)
int 4byte -2,147,483,648(-2^31) ~ 2,147,483,647(2^31 - 1)
long 8byte -9,223,372,036,854,775,808(-2^63) ~ 9,223,372,036,854,775,807(2^63 - 1)
// 각 데이터 타입의 표현 범위에 맞는 값을 할당하고 있습니다. 
byte  byteNum  = 123;
short shortNum = 12345;
int   intNum   = 123456789;
long  longNum  = 12345678910L;

// 각 데이터 타입의 표현 범위에 벗어난 값을 할당하고 있어 에러가 발생합니다. 
byte  byteNum  = 130;
short shortNum = 123456;
int   intNum   = 12345678910;

// 숫자가 길면 언더바로 구분할 수 있습니다. 
int   intNum   = 12_345_678_910;
long  longNum  = 12_345_678_910L;

 

정수 값의 오버플로우와 언더플로우

코드를 실행하다 보면 값이 각 타입의 표현 범위를 넘어서는 경우가 있다

예를 들어 byte 형 값 127에 1을 더하면 128이 되어 byte의 표현 범위를 넘어선다

그러면 128이 아닌 -128이 되는 오버플로우가 발생.

public class Main {
    public static void main(String[] args) {
        byte a = 127;
        a += 1;
        System.out.println(a); // -128 출력
    }
}

 

언더플로우는 반대

public class Main {
    public static void main(String[] args) {
        byte a = -128;
        a -= 1;
        System.out.println(a); // 127 출력
    }
}

실수 타입

타입 메모리 표현 범위 정밀도
float 4byte 음수 : -3.4 * 10^38 ~ -1.4 * 10^-45
양수 : 1.4 * 10^-45 ~ 3.4 * 10^38
7자리
double 8byte 음수 : -1.8 * 10^308 ~ -4.9 * 10^-324
양수 : 4.9 * 10^-324 ~ 1.8 * 10^308
15자리
// float형 리터럴을 float형 변수에 할당
float num1 = 3.14f;

// double형 리터럴을 double형 변수에 할당
double num2 = 3.141592d;
double num2 = 3.141592;

 

실수형의 오버플로우와 언더플로우

실수형도 오버플로우와 언더플로우가 발생한다. 하지만 실수와는 조금 다름

  • 오버플로우
    • 값이 음의 최소 범위 또는 양의 최대 범위를 넘어갔을 때 발생, 이때 값은 무한대가
  • 언더플로우
    • 값이 음의 최대 범위 또는 양의 최소 범위를 넘어갔을 때 발생, 이 때 값은 0

논리 타입

boolean / 1byte / true, false /

1byte?? : 단순히 참과 거짓을 표현하기 위해서는 1bit만 있으면 되지만, JVM이 다룰 수 있는 데이터의 최소 단위가 1byte이다

boolean a = true;
boolean b = false;

문자 타입

char / 2byte / 유니코드로 문자를 저장

문자 타입은 오직 한 가지

char a1 = 'a';
char a2 = 'ab'; // 에러 : 단 하나의 문자만 할당할 수 있음
char a3 = "a"; // 에러 : 작은 따옴표를 사용해야함

 

728x90