본문 바로가기
JAVA

[JAVA] Chapter 15. Wrapper Class

by varcode 2023. 7. 20.

- Wrapper classprimitive data type을 객체 형태로 다루기 위해 사용되는 클래스이다. 기본 데이터 타입의 첫 글자를 대문자로 바꾸면 Wrapper Class가 된다.
- Wrapper class
는 기본 데이터를 인스턴스로 생성해서 메모리에 올리는(객체로 바꾸어주는) Boxing과 객체를 기본 데이터 타입의 값으로 바꾸어주는 Unboxing을 제공한다.
- Wrapper class
의 주요 사용처 중 하나는 generics인데, genericscollection과 같은 클래스에서 사용되며 타입 안정성을 보장하기 위해 사용된다.

 

Wrapper class는 아래와 같이 사용할 수 있다.

Integer a = new Integer(10);
a = new Integer(a.intValue() + 10);

a의 값을 바꿀 때 intValueUnboxing하여 수정한 후 다시 새로운 메모리(new)를 차지하는 것을 볼 수 있다. 값만 바꾸면 되지 왜 새로운 메모리를 차지할까?
JAVA
에서 Wrapper class는 문자열과 더불어 Immutable data이다. 따라서 한번 선언되면 값을 수정할 수 없기 때문에 새로 생성하는 방법밖에 없다.

 

Java에서 immutable data는 다음과 같다.
1. String : Java
의 가장 기본적인 문자열 타입 중 하나로, 한 번 생성된 String 객체는 변경할 수 없다. 문자열을 수정하려면 새로운 String 객체를 생성해야 한다.
2. Wrapper class : Java
에서는 각각의 primitive data type에 대한 wrapper class를 제공하는데, wrapper class들은 객체로 취급되며 한 번 생성된 객체는 변경할 수 없다.
3. LocalDate, LocalDateTime, LocalTime : Java 8
부터 도입된 date/time API, 불변한 날짜 및 시간 객체를 제공한다.

Immutable data thread-safe 하며, 객체의 상태가 변하지 않기 때문에 객체 간의 의존성이 낮다. 이로 인해, 코드의 유지 보수성과 안정성이 향상된다. 또한, immutable data는 객체를 재사용할 수 있기 때문에 메모리 사용량을 줄일 수 있다.

 

Wrapper class를 다음과 같이 줄여서 사용할 수도 있다.

Integer a = 10;
a = a + 10;

코드를 해석할 때 주의해야 할 점은, a에 주소 10이 아니라, 인스턴스를 생성한 후 값을 10으로 넣은 주소를 넘겨주는 것이라는 점이다. a = a + 10이라는 코드를 본다면 일반 데이터 타입인지 Wrapper class 타입인지 확인해 보아야 한다.

기본 데이터 타입과 참조 데이터 타입은 절대 연산에 함께 참여할 수 없다. Wrapper에서만 허용된다. , Integer a = 10으로 작성할 수는 있지만 Test test = 10 등으로 작성할 수는 없다.

 

댓글