본문 바로가기

컴퓨터/JAVA

자바 고급 스터디 2. wrapper class, primitive type(기본형), 일급 콜랙션

반응형

자바 고급 스터디 목록
공부 시간 : 2021/03/15 00:00~01:30

2주차. Wrapper Class에 대해서 설명해보고 Wrapping을 함으로써 얻는 이점과 일급콜랙션에 대해서 사용 예시를 들며 설명해보세요.

 

 

wapper class를 이해하기 전에 기본형(primitive type)에 대해서 알아야한다.

자바에서는 기본형에는 int, char, byte, boolean, short, long, float, double 총 8가지가 있다.

 

wrapper class란 위 8가지 기본형 타입을 객체화 한 것이다.

 

여기서 문제 하나 풀어보자.

int a = 1;
Integer b = 1;

a와 b는 각각 메모리를 얼마나 사용할까?

 

 

결과를 말하면 a는 4byte, b는 16byte를 차지한다.

a는 primitive Type 이기 때문에 int의 값 1만 저장하면 되지만,
b는 wrapper class이기때문에 클래스 포인터, 플래그, 락(Lock), int값 총 4개의 value를 저장해야한다.
각각 4byte씩 총 16byte를 차지한다.

 

 

 

 

두번째 문제, 아래 결과가 어떻게 나올지 예상해보자.

(글쓴이 생각 : 아 ㅋㅋ wrapper class는 참조형이니까 주소값으로 비교 하는데 당연히 false가 나오지. 너무 쉬운거 아닌가? 라고 생각함.)

Integer a = -128;
Integer b = -128;

System.out.println(a == b);

하지만 결과는 true가 나왔다.

 

 

Integer class를 까보고 위와 같이 나오는 이유를 알 수 있었는데, 메모리 효율을 위해 -128 ~ 127의 Integer 값은 자동적으로 캐싱하기 때문이다. ( 너무 당연하고 쉬운 문제를 만나게 된다면 한번쯤은 의심을 해보자... )

 

아래 코드를 보면 캐쉬할 상한값을 VM에서 설정 할 수 있는 것 같은데 과연... 자바를 사용하면서 설정하게 될 경우가 생기게 될까...??

 

 

 

primitive 타입은 wrapper class에 비해 약 메모리 효율이 4배 정도 좋다고 볼 수 있다. 메모리 효율이 정말 중요한 상황이라면 기본형 사용을 고려해보자!

 

 

 

Wapper class를 사용함으로써 얻을 수 있는 이점에 대해서 알아보자.

  1. 기본형에는 null 값을 넣을 수 없지만 Wrapper class에는 null을 넣을 수 있다.
  2. 제네릭 사용시 기본형을 사용 할 수 없지만 wrapper class는 사용 할 수 있다.

 

일급 컬랙션에 대해서 알아보자.

 

 

일급 객체란 primitive type이 아닌 collection을 하나의 클래스로 wrapping 하는 것이다.

일급 컬랙션의 조건은 딱 하나이다. 컬랙션을 제외한 다른 맴버변수가 없는 것이다.

 

 

왜 일급 컬랙션을 사용해야하고, 일급 컬랙션을 사용하면 어떤 이점을 가질 수 있을까?

  1. 비지니스에 종속적인 자료구조
  2. Collection의 불변성을 보장
  3. 상태와 행위를 한 곳에서 관리
  4. 이름이 있는 컬렉션

위와 같은 4개의 이점이 있다.

 

 

하나하나에 대한 예시를 들며 잘 정리해보려 했지만 아직까지는 일급콜랙션을 잘 적용해본 경험이 없어 예시를 들기는 무리가 있는 것 같다.

또한, 잘 정리된 글을 여러번 읽고 정리하는 것이 더 효율적이라 판단되어 잘 정리되어 있는 글을 공유하는 것으로 마무리 하려한다.

 

일급 컬렉션 (First Class Collection)의 소개와 써야할 이유

 

 

참고한 내용 : 

[Java] 자바 자료형(primitive, reference) 에 대한 고찰 - 자바 Integer에 캐시가 있다고?

반응형