Java 기초

[Java 기초] 2-1 자료형

kimbh 2024. 11. 9. 14:05

안녕하세요.

저번 시간에는 Java 변수에 대해서 포스팅을 했는데요.

 

이번 시간에는 자료형(Data Type)에 대해서 포스팅 해볼려고 합니다.

자료형은 코딩을 하게되면 빠질 수 없는 친구라고 생각합니다.

변수를 선언할 때에 어떤 상황에서는 문자열로 변수를 지정해야 될때도, 정수형으로 변수를 지정할때 타입을 지정해줘야 하는게 자료형이기 때문에 지금부터 포스팅 시작해보도록 하겠습니다!!

 

1. 정수 타입

자바에서 제공하는 기본적인 정수형 타입은 byte, char, short, int, long 총 5개가 존재합니다.

(1) byte

정수 타입 중 제일 작은 단위인 byte는 1byte 를 기준으로 8bit 메모리를 사용할 수 있습니다.

4bit 기준 예시

먼저 예시로 4bit 기준으로 위에 사진처럼 4개의 박스가 생긴것을 알 수 있습니다. 1개의 박스당 1bit로 2⁴만큼 값이 늘어납니다. 2⁴을 10진수로 변화시키면 16의 값을 나타내는데 그렇다는 즉 4bit는 -8 ~ 7까지 값을 사용할 수 있습니다.

*4bit인데 왜 범위가 -8~ 7인가? 

-> 2⁴의 값은 16입니다. 이 값을 음수의 값부터 0을 포함해 정수의 값 범위까지 범위를 정하기 때문에 범위는 -8 ~ 7으로 알 수 있습니다. 공식으로 bit의 값이 n값으로 늘어날때마다  (-2n-1 ~ 2n-1-1) 이라고 생각하면 됩니다.

 

그렇다면 8bit = 1byte인 것을 알 수 있는데 8bit는 어느정도의 값을 범위로 둘까?

28=256으로 -128~127의 범위를 가집니다. byte로 데이터 타입을 지정할 때 -128~127의 범위에 해당되지 않도록 값을 초기화하면 컴파일 시 에러가 날 수 있습니다. 정확한 내용은 예시로 보여드리겠습니다.

package Test;

public class exam1 {
    public static void main(String[] args){
        byte i = -128; // byte 범위 -128 ~ 127
        System.out.println(i);
    }
}

해당 코드는 byte값 범위 내로 초기화 했기 때문에 컴파일 시 오류없이 출력되지만.

package Test;

public class exam1 {
    public static void main(String[] args){
        byte i = 128; // byte 범위 -128 ~ 127
        System.out.println(i);
    }
}

해당 에러가 뜨면서 컴파일이 작동하지 않는것을 알 수 있습니다.

(byte의 크기)

package Test;

public class exam1 {
    public static void main(String[] args){
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);
    }
}

(2) short

short가 사용할 수 있는 메모리 크기는 2byte로 byte의 자료형보다 더 높은 메모리 크기를 가진것을 알 수 있습니다.

216로 65,536의 크기를 가지고 있고, -32768 ~ 32767의 범위를 가집니다.

package Test;

public class exam1 {
    public static void main(String[] args){
        short i = 32767; // short 범위 : -32768 ~ 32767
        System.out.println(i);
    }
}

 

(short 메모리 크기 값의 범위를 벗어나게 될 경우)

package Test;

public class exam1 {
    public static void main(String[] args){
        short i = 32800; // short 범위 : -32768 ~ 32767
        System.out.println(i);
    }
}

(short의 크기)

package Test;

public class exam1 {
    public static void main(String[] args){
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
    }
}

(3) char

char는 문자형을 나타내는 자료형입니다. 문자형이란 하나의 문자를 나타내기 위해 '(작은 따음표)를 감싸는 것을 말합니다.(문자 리터럴이라고도 불림) 문자 리터럴은 0 ~ 65535의 값 까지 사용할 수 있습니다. 그 이유는 유니코드라고 불리는 국제 표준 규약을 따라 세계 각국의 문자가 2byte로 저장할 수 있기 때문에 자바에서는 2byte 크기를 제공합니다.

예시로 코드와 출력문을 통해 알려드리겠습니다.

package Test;

public class exam1 {
    public static void main(String[] args){
        char a = 'A'; // 유니코드 : 65
        char b = '가';// 유니코드 : 44032
        char c = '마';// 유니코드 : 47560
        char d = '丠';// 유니코드 : 20000
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        char aa = 65;
        char bb = 44032;
        char cc = 47560;
        char dd = 20000;
        System.out.println(aa);
        System.out.println(bb);
        System.out.println(cc);
        System.out.println(dd);
    }
}

해당 소스에서 보시면 각 문자 리터럴마다 유니코드의 값이 정해져있으며 문자형으로 유니코드 값을 넣으면 해당 문자들이 출력되는 것을 알 수 있습니다. 결론적으로 유니코드는 정수이기 때문에 char도 정수타입에 포함이 됩니다.

(char의 크기)

package Test;

public class exam1 {
    public static void main(String[] args){
        int i = Character.MAX_VALUE;
        int j = Character.MIN_VALUE;
        System.out.println(i);
        System.out.println(j);
    }
}

 

(4) int

int가 사용할 수 있는 메모리 크기는 4byte로 short의 자료형보다 더 높은 메모리 크기를 가진것을 알 수 있습니다.

232 4,294,967,296의 크기를 가지고 있고, -2,147,483,648 ~ 2,147,483,647의 범위를 가집니다.

package Test;

public class exam1 {
    public static void main(String[] args){
        int i = -2147483648; // int 범위 : -2147483648 ~ 2147483647
        System.out.println(i);
    }
}

 

(int 메모리 크기 값의 범위가 벗어나게 될 경우)

package Test;

public class exam1 {
    public static void main(String[] args){
        int i = -2147483700; // int 범위 : -2147483648 ~ 2147483647
        System.out.println(i);
    }
}

(int의 크기)

package Test;

public class exam1 {
    public static void main(String[] args){
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
    }
}

 

(5) long

정수형 타입중 가장 메모리 크기가 큰 타입입니다. int보다 훨씬 큰 범위 값을 가지기 때문에 int로 출력을 하지 못하면 long으로 데이터타입을 바꿔 사용합니다.

메모리의 크기는 264로 -9223372036854775808 ~ 9223372036854775807정도의 범위 값을 가집니다.

package Test;

public class exam1 {
    public static void main(String[] args){
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
    }
}