int와 Integer의 차이(Primitive vs Boxed Primitive)

MARU·2022년 3월 3일
0

JAVA

목록 보기
2/5

int

  • Primitive Type (원시 타입)

    primitive 타입이란?
    boolean, char, int...등 실제 값을 저장하는 공간이다.

  • 기본값이 존재하기 때문에 null 값을 저장할 수 없다.

  • 제네릭 타입에서 사용할 수 없다.

  • 스택 영역에 저장된다. (메모리 효율과 접근 속도 면에서 좋다.)

Integer

  • Boxed Primitive Type (Wrapper 클래스)

    Wrapper 클래스란?
    기본 타입의 데이터를 객체로 포장해주는 클래스이다.

  • null 값을 저장할 수 있다. (따라서 SQL 연동 시 편리하다.)

  • 제네릭 타입에서 사용할 수 있다.

  • 힙 영역에 저장된다.

Primitive Type과 Boxed Primitive Type 중에 무엇을 쓰는게 좋은가요?

null값을 저장/반환해야 할 경우 or Collection을 이용할 경우 => Boxed Primitive Type
그 외의 경우 => Primitive Type

그 이유는?

  • 위에서 언급했던 대로 효율성을 따지자면 Primitive 타입이 우세하기 때문에 Primitive을 써주는 것이 좋다. 또 다른 이유는 Boxed Primitive Type의 경우 비교연산에서 실수 할 가능성이 있기 때문이다. (값을 비교하는 것이 아닌 레퍼런스를 비교하기 때문)

엥? num1 == num2 했을 때 참이던데요?

Integer num1 = 127;
Integer num2 = 127;
  • num1 == num2를 했을때 참이 나온다. Boxed Primitive Type은 레퍼런스를 비교하게 되는데 어떻게 참이 나올까? 그 이유는 cache가 존재하기 때문이다. Boxed Primitive는 자주 사용되는 범위에 한해서 캐시를 가지고 있기 때문에 이미 저장되어 있는 객체를 반환하게 되고, 그러면 레퍼런스가 같기 때문에 '같다'라고 인식을 하게 되는 것이다. 캐시를 가진 특정 범위를 벗어나는 값을 넣고 다시 비교 연산을 한다면 거짓이 나오게 된다.

웬만하면 기본타입을 사용하도록 합시다.🙄

profile
데굴데굴

0개의 댓글