Wrapper Class란?
기본 자료형에 대한 클래스 표현이다.
Primitive VS Wrapper
Primitive는 기본 자료형을 의미한다.
int, long, float, boolean과 같이 맨 앞의 이니셜이 소문자인 자료형이다.
초기화될 때에 0이나 false같이 유의미한 값으로 초기화된다.
Wrapper는 영어의 의미대로 객체로 한번 감싼 자료형이다.
int -> Integer, long -> Long처럼 맨 앞의 이니셜이 대문자인 자료형이다.
초기화될 때에 null로 빈객체로 초기화된다.
Wrapper Class를 사용하는 이유
실제로 프로젝트를 진행 중에도 궁금했던 점이다.
기본 자료형은 의도적으로 초기화하지 않아도 신규 값으로 이미 유의미한 값이 들어가는데
래퍼 클래스는 의도적으로 초기화하지 않으면 null로 빈객체가 생성되어 무의미한 값임을 인지할 수 있다.
안정성에 있어서 내가 의도하지 않은 값이라면 빈객체인 null로 할당되어 인지할 수 있도록 설계되는게 좋은 설계인 것 같다.
하지만 이런 유무의미를 따져야 되는 설계가 필요한 경우가 아니라면 그냥 기본 자료형으로 쓰는게 뒤에 나올 auto boxing, unboxing의 과정을 줄여주어 비효율적인 시간 소비를 줄여줄 수 있다.
AutoBoxing & AutoUnBoxing
JDK 1.5 부터 제공된 기능이다.
Wrapper Class에 상응하는 Primitive Type이 받을 때만 적용된다.
// 제네릭 타입 선언은 래퍼클래스로 선언됨.
List<Integer> lists = new ArrayList<>();
// 넣은 값은 기본 자료형이지만 저장될 때는 래퍼클래스로 오토박싱되어 저장됨.
lists.add(10);
위 코드에서 이루어진 것은 오토박싱이다.
10이라는 기본 자료형을 래퍼 클래스 Integer라는 박스에 자동으로 담은 것(오토박싱)이다.
반대는 다음과 같다.
// lists.get(0)을 하면 돌아오는 값은 래퍼클래스에 감싸져있는 Integer 10 값이다.
// 이를 int num으로 받으면 오토언박싱이 일어난다.
int num = lists.get(0);
위의 리스트에서 값을 꺼내면 Integer 자료형 박스 안에 10이 담겨져 있는 형태이다.
이를 int num으로 받게 되면 Integer 박스 안에서 10을 자동으로 꺼내주는 오토언박싱이 일어난다.
오토박싱과 오토언박싱은 자바가 내부적으로 자동 처리해주는 기능이다.
'Language > Java' 카테고리의 다른 글
[Java] 동시성 문제, 쓰레드 로컬 ThreadLocal (1) | 2023.11.30 |
---|---|
Java 필수 - 멀티쓰레드와 동기화 (feat. Atomic, Synchronized, Volatile) (0) | 2023.07.03 |
Java 기본 - 접근자 (0) | 2023.06.30 |
Java 기본 - 오버라이딩 오버로딩 (0) | 2023.06.29 |
Java 기본 - final 키워드 (0) | 2023.06.29 |