공부공부/Java

[Java] Wrapper class란?

이숭간 2021. 7. 13. 18:36
728x90

Wrapper class

프로그램에 따라 기본타입의 데이터객체로 취급해야 하는 경우에 자바에서 제공하는 Wrapper class를 이용한다.

 

예시로, 어떤 메소드의 파라미터가 객체타입만 가능하다면, 기본타입을 그대로 사용할 수 없으므로 래퍼클래스를 한번 거쳐서 객체로 변환후 메소드를 호출해야한다.

 

- 자바에서 제공하는 Wrapper class

byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

래퍼클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당값을 가지는 객체로 만들어준다.

래퍼클래스는 모두 java.lang패키지에 포함되어 제공된다.

 

박싱, 언박싱

래퍼클래스는 인스턴스에 저장된 값을 바꿀수는 없고, 객체를 만들면 새로운 인스턴스가 생성되고 그 생성된 인스턴스의 주소값만을 참조할 수 있다.

위 그림과 같이 기본 타입의 데이터를 래퍼클래스의 인스턴스로 변환하는 과정을 '박싱'

래퍼클래스 인스턴스에 저장된 값을 다시 기본타입으로 꺼내는 과정을 '언박싱'이라고 한다.

 

오토박싱과 오토언박싱

JDK 1.5부터는 박싱과 언박싱이 필요한 상황에서 자바 컴파일러가 이를 자동으로 처리해준다.

이렇게 자동화된 박싱과 언박싱을 오토박싱, 오토언박싱이라 부른다.

 

오토박싱을 이용하면 두번째 예제처럼 new키워드없이 Character인스턴스를 생성할 수 있다.

반대도 마찬가지로 오토언박싱을 이용하면 charValue()메소드를 사용하지 않아도 오토언박싱을 이용해 인스턴스에 저장된값을 바로 참조할 수 있다.

Integer num = new Integer(17); // 박싱
int n = num.intValue();        // 언박싱
System.out.println(n); // 출력 값: 17


Character ch = 'X'; // Character ch = new Character('X'); : 오토박싱
char c = ch;        // char c = ch.charValue();           : 오토언박싱
System.out.println(c); // 출력 값: X

 

래퍼클래스의 비교연산에는 동등연사자를 사용하면 주소값을 참조하므로 같은 값이라도 서로다른 객체이기때문에 다르다고 판단한다.

따라서 string을 비교할때처럼 equals()메소드를 사용해야한다.