본문 바로가기

IT/개발

Wrapper 클래스(Wrapper class)

자바의 데이터 타입에 대해서는 레퍼런스타입에 관해 설명을 할 때 설명을 했었는데요.

자바의 데이터 타입은 프리미티브 타입과 레퍼런스 타입 두가지가 존재하고 프리미티브 타입은 컴퓨터가 읽을 수 있는 기본적인 값을 나타내기 위한 값이라고 했고, 레퍼런스타입은 프리미티브타입을 기반으로 만들어진 타입이라고 하였습니다.

이러한 프리미티브 타입은 자바API에서 제공하는 Wrapper클래스를 이용해서 레퍼런스 타입으로도 나타낼 수가 있습니다.

 

Wrapper클래스란 프리미티브데이타를 담는 그릇이라고 할 수 있고 Wrapper객체를 생성하는 것은 프리미티브데이타를 담을 객체를 생성하는 것이라고 할 수 있습니다.

 클래스 이름

프리미티브 타입 

 Byte

 byte 

 Short

 short

 Integer

 int

 Long

 long

 Character

 char

 Float

 float

 Double

 double

 Boolean

 boolean

 

Wrapper클래스의 생성은 해당 프리미티브데이타와 혹은 그 프리미티브데이타값을 가진 String객체를 파라매터로 받아서 생성하게 됩니다.

Wrapper클래스의 자주 사용되는 메소드로는 parse메소드와 valueOf메소드가 있습니다.

parse메소드는 문자열을 파라매터로 받아서 해당 Wrapper클래스에 값을 반환합니다.

valueOf메소드는 Wrapper클래스 생성자와 달리 constant pool에 값이 있는지 확인하고 있으면 그 값의 참조값을 가져옵니다. , 새로 생성하지 않습니다. 하지만 없을 경우는 새로 생성을 하게 됩니다. 그리고 그 해당 타입의 객체를 반환합니다. 그렇기 때문에 Wrapper객체를 생성 할 때는 무분별하게 생성자를 이용하지 말고 valueOf메소드를 사용하는 것이 좋습니다.

 

프리미티브 타입을 Wrapper타입으로 5.0이후 버전부터는 자동으로 변환해주는데 그것을 unboxing이라 하고, unboxing한 데이터를 다시 Wrapper타입으로 만들어주는 것을 boxing이라 합니다.

 

 

아래 그림에서 빨간네모가 자동 boxing이 발생하는 부분이고 파란네모가 자동 unboxing이 발생하는 부분입니다. 

키보드 입력을 예로 들면 키보드로 숫자 1일 입력받으면 자바는 그 값을 우선 String으로 입력을 받은 다음 Integer객체로 만들고, 그것을 다시 unboxing하게 됩니다.

 

 

5.0이전부터 JVM 내부적으로는 이러한 형태로 사용되었으나, 5.0이후부터 개발자들에게도 boxing, unboxing기능을 제공하기로 하였다고 합니다.

'IT > 개발' 카테고리의 다른 글

php 함수 오버로딩  (0) 2014.04.10
자바 파일 입출력(File IO)  (0) 2013.08.22
enum type & static final  (0) 2013.08.18
오버라이딩(overriding)  (0) 2013.08.17
객체(object) 캐스팅(casting)  (0) 2013.08.17