1.5 자료형

자바에서 다루는 자료형은 크게 둘로 나눌 수 있다.

하나는 기본 자료형이고, 다른 하나는 참조형이다.


둘의 차이점은 다음과 같다.


- 기본 자료형은 데이터 값을 직접 가진다.

- 참조형은 값을 가진 인스턴스의 참조 주소(메모리상의  배치된 장소)를 가진다. 인스턴스 자체를 가지는 것은 아니다.


1.5.1 기본 자료형

기본 자료형은 값을 직접 가진 자료형이다. 따라서 값을 변경하면 데이터의 내용이 직접 치환된다.


기본 자료형에는 다음 표와 같은 것이 있다.





기본 자료형에서 주의할 점은 자료형의 범위를 넘더라도 오류가 발생하지 않는다는 것이다. 양수라면 음수로, 음수라면 양수로 자동 변환해 버리기 때문이다. 예를 들어 int의 최댓값(Integer.Max_VALUE)인 2.147.483.647에 1을 더하면 결과는 - 2.147.483.648이 된다. 예제로 확인해보자.


----------------------------------------------------------------------------------------------------------------------------


public class OverflowCheck1 {


/*

int가 최댓값을 넘을 때의 동작을 ㅗ학인하는 클래스이다.

*/


/*

최댓값에 1을 더한 값을 출력한다.


@param arg

 명령을 인수. 이번에는 사용하지 않는다.

*/

public static void main(String[] args) {

int i = Integer.MAX_VALUE;

System.out.println(i);

i = i + 1;

System.out.println(i);

}

}


실행결과

2147483647

-2147483648


큰 값을 다루다 보면 자신도 모르는 사이에 의도하지 않은 값으로 변경되어 있을 수 있으므로 주의하자.


부호 없는 Integer와 Long 지원


자바 8 이후로는 int와 long에서 부호 없는 값을 가질 수 있게 된다. 부호가 없다는 말은 음수 값을 가지지 않는다는 뜻이다. 음수 값에 할당하던 영역을 양수에 사용할 수 있게 되면서 다룰 수있는 범위도 달라졌다.



단, 다른 언어와 달리 부호 없음을 나타내는 제한자가 제공되는 것은 아니고, 특수한 메서듬(Integer와 Long 클래스의 toUnsignedString 메서드)를 사용해야 부호없는 값을 가져오거나 사용할 수 있다.

구체적인 예를 들어보자.



/**
 * 자바 8에서 부호 없는 Integer와 Long의 한계치 이ㅏㄹ때의 동작을 확인하는 클래스이다.
 */
public class OverflowCheck2 {
  /**
   * 자바 8에서 부호 없는 Integer와 Long의 한계치 예제를 출력한다.
   * @param args
   *       명령줄 인수 . 이번에는 사용하지 않는다.
   */
  
  public static void main(String[] args) {
    // 자바 8부터
    
    int i = Integer.MAX_VALUE + 1;
    String value = Integer.toUnsignedString(i);
    System.out.println(value);

    i = Integer.MAX_VALUE + Integer.MAX_VALUE + 1;
    value = Integer.toUnsignedString(i);
    System.out.println(value);

    i = i +1;

    value = Integer.toUnsignedString(i);
    System.out.println(value);

    long l = Long.MAX_VALUE + Long.MAX_VALUE + 1;
    value = Long.toUnsignedString(l);
    System.out.println(value);

    l = l+1;
    value = Long.toUnsignedString(l);
    System.out.println(value);
  }
}

실행 결과
2147483648
4294967295
0
18446744073709551615
0

Integer와 Long 클래스의 toUnsignedStrng 메서드를 호출하면 int와 Long
 값의 부호 없는 문자열 표현을 얻을 수 있다.











'프로그래밍 > JAVA' 카테고리의 다른 글

1.5.3 인스턴스  (0) 2019.02.07
1.5.2 참조형  (0) 2019.02.07
1.4.2 산술 연산  (0) 2019.01.23
1.4 기본적인 계산  (0) 2019.01.23
1.3.7 static 변수와 static 메서드  (0) 2019.01.23
TAGS.

Comments