본문 바로가기

IT/Java

01_정수타입

- 자바의 정수형 데이터 타입으로는 byte, char, short, int, long이 있다.

- 그 중 int를 기본 정수형이라고 한다. 모든 정수형은 연산시 int형으로 변환되어 처리되며 결과도 int형이다.

 

01. 바이트 타입 :

- 바이트 타입은 -127 ~ 128까지의 숫자를 나타낼 수 있다. 해당 범위를 벗어나는 값으로는 변수를 초기화할 수 없다.

- 주로 이진 데이터를 처리하는데 사용된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ByteExample {
    public static void main(String[] args) {
        byte var1 = -128;
        byte var2 = -30;
        byte var3 = 0;
        byte var4 = 30;
        byte var5 = 127;
//        byte var6 = 128;    //초기화 자체가 불가
        
        System.out.println(var1);
        System.out.println(var2);
        System.out.println(var3);
        System.out.println(var4);
        System.out.println(var5);
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

02. 쓰레기값

- 정상 범위의 값으로 초기화되었던 변수도 연산 과정에서 해당 데이터타입의 범위를 벗어나게 될 수 있다.

- 이러한 경우 반대쪽 끝값으로 돌아가 순환하게 된다. 즉, 사용자의 의도를 벗어나게 되는 것이다.

 

아래의 코드를 보면 바이트타입의 변수 var1은 처음에 125라는 정상범위의 숫자로 초기화 되었다.

이후 for문의 연산을 통해 1씩 더해가며 126, 127로 바뀐다.

그런데 바이트타입으로 128을 나타낼 수는 없다(최댓값 초과)

이러한 경우(127+1을 한 경우) 바이트로 나타낼 수 있는 최솟값인 -128로 돌아가게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class GarbageValueExample {
    public static void main(String[] args) {
        byte var1 = 125//정상
        int var2 = 125;
        
        for(int i=0; i<5; i++) {
            var1++;
            var2++;
            System.out.println("var1 : " + var1 + "\t" + "var2 : " + var2);
        }
        
    }
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

 

출력결과 : 

물론 프로그램이 비정상적으로 종료되지는 않지만 내가 원하던 결과를 얻지는 못할 것이다.

이러한 쓰레기값이 발생하는 것을 막기 위해 아래와 같이 Byte.MIN_VALUE, Byte.MAX_VALUE를 이용할 수 있다.

 

03. 쓰레기값 방지

아래와 같이 ifi문을 통해 테스트를 거쳐, 결과값이 유효하다고 판단될 때만 연산결과를 수행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package ex01_variablesAndTypes;
 
public class GarbageValueExample {
    public static void main(String[] args) {
        byte var = 125;
        
        for(int i=0; i<5; i++) {
            if(var <= Byte.MIN_VALUE || var >= Byte.MAX_VALUE) {
                System.out.println("범위를 초과하여 연산을 실행할 수 없습니다.");
                break;
            } else {
                var++;
            }
            System.out.println("var : " + var);
        }
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

결과 : 

byte로 나타낼 수 있는 127을 벗어나자 연산을 실행할 수 없다는 메시지를 띄워주며 반복문도 종료된다.

 

04. Char 타입

- char 타입 역시 정수형이다. char타입은 int타입으로 자동형변환 된다

- int 타입은 char타입으로 자동으로 형변환 되지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class CharExample {
    public static void main(String[] args) {
        char c1 = 'A';
        char c2 = 65;
        char c3 = '\u0041';    //16진수 유니코드
        
        char c4 = '가';
        char c5 = 44032;
        char c6 = '\uac00';
        
        int uniCode = c1;    //c1은 char타입인데 int에 넣어도 문제없이 컴파일 된다
 
//        char c7 = uniCode;    //반면, int타입을 char에 넣을 때는 자동형변환이 되지 않는다.
        
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        System.out.println(c5);
        System.out.println(c6);
        System.out.println(uniCode);
                
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

'IT > Java' 카테고리의 다른 글

06_참조형 데이터 타입  (0) 2019.12.01
05_중복 없이 로또 번호 추출(조건문, Math.random())  (0) 2019.11.30
04_String 연산자  (0) 2019.11.29
03_정확한 계산  (0) 2019.11.29
02_실수형 데이터  (0) 2019.11.29