Back-end/이것이 자바다[신용권 한빛미디어]

Wrapper(포장) 클래스

Ho's log 2021. 10. 24. 19:07

자바는 기본타입 (byte, char, short, int, long, float, double, boolean) 의 값을 갖는 객체를 생성

이런 객체를 포장(Wrapper) 객체 

기본 타입의 값을 내부에 두고 포장하기 때문 

포장 객체의 특징은 포장하고 있는 기본 타입 값은 외부에서 변경할수 없다 

내부의 값을 변경하고 싶다면 새로운 포장객체를 만들어야 함 

 

java.lang 패키지에 포함

기본 타입 포장 클래스
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
boolean Boolean

 

박싱(Boxing)과 언박싱(Unboxing)


기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)

포장 객체에서 기본타입의 값을 얻어내는 과정을 언박싱(Unboxing)이라고 한다 

 

박싱 방법 = 간단하게 포장클래스의 생성자 매개값으로 기본타입의 값 또는 문자열을 넘겨주면 된다

 

기본 타입의 값을 줄 경우 문자열을 줄 경우
Byte obj = new Byte(10); Byte obj = new Byte("10");
Character obj = new Character("가") 없음
Short obj = new Short(100); Short obj = new Short("100");
Integer obj = new Integer(1000); Integer obj = new Integer("1000");
Long obj = new Long(10000); Long obj = new Long("10000");
Float obj = new Float(2.5F); Float obj = new Float("2.5F");
Double obj = new Double(3.5); Double obj = new Double("3.5");
Boolean obj = new Boolean(true); Boolean obj = new Boolean("true");

 

포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용 할 수도 있다

Integer obj = Integer.valueOf(1000);

Integer obj = Integer.valueOf("1000");

 

이렇게 박싱된 포장 객체에서 다시 기본 타입의 값을 얻어 내기 위해서는 (언박싱 하기 위해서는) 각 포장 클래스마다 가지고 있는 "기본타입명 +Value()"메소드를 호출하면 된다 

 

기본타입의 값을 이용 
byte num = obj.byteValue();
char ch = obj.charValue();
short num = obj.shortValue();
int num = obj.intValue();
long num = obj.longValue();
float num = obj.floatValue();
double num = obj.doubleValue();
boolean bool = obj.booleanValue();

 

자동 박싱과 언박싱


기본 타입 값을 직접 박싱, 언박싱 하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있다

 

자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우 발생 

int 타입의 값을 Integer 클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer 객체가 생성

Integer obj = 100; // 자동 박싱

 

자동 언박싱은 기본 타입에 포장객체가 대입될 경우에 발생 

Integer 객체를 int 타입 변수에 대입하거나 Integer 객체와 int 타입 값을 연산하면 Integer 객체로 부터 int 타입의 값이 자동 언박싱 되어 연산 

Integer obj = new Integer(200);

int value1 = obj;  // 자동 언박싱 

int value2 = obj + 100;// 자동 언박싱

 

* 컬렉션 객체에 int 값을 저장하면 자동박싱이 일어나 Integer 객체가 저장 

 

자동박싱과 언박싱은 자바 5부터 추가된 기능이기 때문에 자바 4이전 버전에서는 직접 박싱과 언박싱 해주어야함 

 

문자열을 기본 타입 값으로 변환 


기본 타입의 값을 박싱해서 포장객체로 만드는것 

문자열을 기본 타입 값으로 변환 할때 만힝 사용 

"parser+기본타입" 명으로 되어있는 정적(static) 메소드가 있음 

이 메소드는 문자열을 매개값으로 받아 기본타입 값으로 변환

 

기본 타입의 값을 이용
byte num = Byte.parserByte("10");
short num = Short.parseShort("100");
int num = Integer.parseInt("1000");
long num = Long.parseLong("100000");
float num = Float.parseFloat("2.5F");
double num = Double.parserDouble("3.5");
boolean bool = Boolean.parseBoolean("true");

 

포장 값 비교 


포장 객체는 내부의 값을 비교하기 위해 ==와 != 연산자를 사용할 수 없다 .

이 연산자는 내부의 값을 비교 하는 것이 아니라 포장 객체의 참조를 비교 

 

내부의 값만 비교하려면 언박싱한 값을 얻어 비교 

 

but!

타입 값의 범위
boolean true, false
char  \u0000~ \u0071
byte,  short, int -128 ~ 127

값들이라면 == 과 != 연산자로 비교 가능

 

* 포장 객체에 정확히 어떤 값이 저장될지 모르는 상황이라면

 ==, != 연산자는 사용하지 않는것이 좋다 

 

equals() 메소드 내부 값을 비교하는 것이 좋다 -> 오버라이딩이 되어있다  

직접 내부 값을 언박싱해서 비교하거나 

 

'Back-end > 이것이 자바다[신용권 한빛미디어]' 카테고리의 다른 글

Date, Calender 클래스  (0) 2021.10.24
Math, Random 클래스  (0) 2021.10.24
Array 클래스  (0) 2021.10.24
정규 표현식과 Pattern 클래스  (0) 2021.10.24
StringBuffer, StringBuilder 클래스  (0) 2021.10.24