ksouth9

래퍼(wrapper)클래스 본문

Java

래퍼(wrapper)클래스

ksouth9 2022. 3. 30. 23:31

wrapper클래스


기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스

매개변수로 객체를 요구하거나, 기본형 값이 아닌 객체로 다뤄야 할때, 객체간의 비교가 필요할 때 등등의 경우에 래퍼 클래스를 사용한다.

래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받는다. 생성자의 매개변수로 문자열을 제공할 때, 각 자료형에 알맞은 문자열을 사용해야 한다. 

기본형 래퍼클래스 생성자 활용예
boolean Boolean Boolean(boolean value) Boolean b = new Boolean(true);
Boolean b2 = new Boolean("true");
char Character Character(char value) Character c = new Character('a');
byte Byte Byte(byte value)
Byte(String s)
Byte b = new Byte(10);
Byte b2 = new Byte("10");
short Short Short(short value)
Short(String s)
Short s = new Short(10);
Short s2 = new Short("10");
int Integer Integer(int value)
Integer(String s)
Integer i = new Integer(100);
Integer i2 = new Integer("100");
long Long Long(long value)
Long(String s)
Long l = new Long(100);
Long l2 = new Long("100");
float Float Float(double value)
Float(float value)
Float(String s)
Float f = new Float(1.0);
Float f2 = new Float(1.0f);
Float f3 = new Float("1.0f");
double Double Double(double value)
Double(String s)
Double d = new Double(1.0);
Double d2 = new Double("1.0");

래퍼 클래스들은 모두 equals()가 오버라이딩되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다. 그리고 toString()도 오버라이딩되어 있어서 객체가 가지고 있는 값을 문자열로 변환하여 반환한다.

 

Number클래스

Number클래스는 추상클래스로 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상이다. 기본형 중에서 숫자와 관련된 래퍼 클래스들은 모두 Number클래스의 자손이다.

 

문자열을 숫자로 변환하기

int i = Integer.parseInt("100");	// 반환값이 기본형 주로 이 방법을 많이 사용한다.
Integer i2 = Integer.valueOf("100");	// 반환값이 래퍼 클래스 타입
문자열 → 기본형 문자열 → 래퍼 클래스
byte b = Byte.parseByte("100");
short s = Short.parseShort("100");
int i = Integer.parseInt("100");
long l = Long.parseLong("100");
float f = Float.parseFloat("3.14");
double = d = Double.parseDouble("3.14");
Byte b = Byte.valueOf("100");
Short s = Short.valueOf("100");
Integer i = Integer.valueOf("100");
Long l = Long.valueOf("100");
Float f = Float.valueOf("3.14");
Double d = Double.valueOf("3.14");

오토박싱 & 언박싱(autoboxing & unboxing)

기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것을 '오토박싱(autoboxing)'이라고하고, 래퍼 클래스의 객체를 기본형으로 자동 변환해주는 것을 '언박싱(unboxing)'이라고 한다.

컴파일 전의 코드 컴파일 후의 코드
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj;
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj.intValue();

컴파일러가 자동으로 변환하는 코드를 넣어준다. 컴파일러가 Integer객체를 int타입의 값으로 변환해주는 intValue()를 추가해준다.

 

사실 이 기능은 컴파일러가 제공하는 기능일 뿐 자바의 원칙이 바뀐 것은 아니다. 생성자가 없는 클래스에 컴파일러가 기본 생성자를 자동적으로 추가해 주듯이 개발자가 간략하게 쓴 구문을 컴파일러가 원래의 구문으로 변경해 주는 것뿐이다.

컴파일 전의 코드 컴파일 후의 코드
Integer intg = (Integer)i;
Object obj = (Object)i;
Long lng = 100L;
Integer intg = Integer.valueOf(i);
Object obj = (Object)Integer.valueOf(i);
Long lng = new Long(100L);

 

'Java' 카테고리의 다른 글

java.util.Random 클래스  (0) 2022.04.05
java.util.Objects 클래스  (0) 2022.04.04
Math클래스  (0) 2022.03.30
StringBuffer클래스의 생성자와 메서드  (0) 2022.03.30
java.lang 패키지(4) - StringBuffer클래스  (0) 2022.03.29