728x90
포장 클래스(Wrapper Class)
기본 타입의 데이터를 먼저 객체로 변환 후 작업을 수행해야 하는 상황이 생겼을 때 기본 타입에 해당하는 데이터를 객체로 포장해주는 클래스다. 포장 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만든다.
포장 객체는 포장하고 있는 기본 타입의 값을 변경할 수 없다.
Integer obj = 100; // Boxing
int value = obj; // UnBoxing
Boxing
- 기본 타입의 값을 포장 객체로 만드는 과정
- 포장 클래스 변수에 기본 타입 값이 대입될 때 발생
UnBoxing
- 포장 객체에서 기본 타입의 값을 얻어내는 과정
- 기본 타입 변수에 포장 객체가 대입될 때 발생
예제 코드 1
더보기
package ch12.sec00;
public class WrapperClass03 {
public static void main(String[] args) {
// 기본 ➡️ 참조
int a = 5;
Integer b = 5; // auto boxing
Number c = a; // auto boxing
Object d = a; // auto boxing
Integer e = null; // ok
// int f = null; // 값 자체가 없기 때문에 null 사용 불가능
}
}
int a 가 Integer가 아닌 Number, Object에 대입이 되는 이유는 Object와 Number가 Integer의 상위라 가능하다
예제 코드 2
더보기
package ch12.sec06;
public class BoxingUnBoxingExample {
public static void main(String[] args) {
// Boxing
Integer obj = 100;
// 수동 unboxing, 재정의한 toString 호출
System.out.println("obj = " + obj); // 100
System.out.println("obj.toString() = " + obj.toString()); // 100
// auto unboxing
System.out.println("value: " + obj.intValue()); // 100
// UnBoxing
int value = obj;
System.out.println("value = " + value); // 100
// 연산 시 UnBoxing
int result = obj + 100;
System.out.println("result = " + result); // 200
}
}
Wrapper 값 비교
==와 != 연산자는 번지를 비교하기 때문에 포장 객체에 어떤 값이 저장될지 모르는 상황이면 적합하지 않다.
포장 클래스의 equals() 메소드는 내부의 값을 비교하도록 재정의되어 있어, equals() 메소드로 내부 값을 비교할 수 있다.
예제 코드
더보기
package ch12.sec06;
public class ValueCompareExample {
public static void main(String[] args) {
// -128 ~ 127 초과값일 경우 다른 객체를 사용하여 번지가 다르다.
Integer obj1 = 300;
Integer obj2 = 300;
System.out.println("==: " + (obj1 == obj2)); // false
System.out.println(System.identityHashCode(obj1)); // 168423058
System.out.println(System.identityHashCode(obj2)); // 821270929
System.out.println("equals(): " + obj1.equals(obj2)); // true
System.out.println();
// -128 ~ 127 범위값일 경우 같은 객체를 사용하여 번지가 같다.
Integer obj3 = 10;
Integer obj4 = 10;
System.out.println("==: " + (obj3 == obj4)); // true
System.out.println(System.identityHashCode(obj3)); // 1919334762
System.out.println(System.identityHashCode(obj4)); // 1919334762
System.out.println("equals(): " + obj3.equals(obj4)); // true
}
}
728x90
'IT > Java' 카테고리의 다른 글
[Java] 제네릭 Generic (0) | 2024.03.20 |
---|---|
[Java] 정규 표현식(Regular Expression) (0) | 2024.03.18 |
[Java] java.base 모듈 (1) | 2024.03.15 |
[Java] 메소드 참조(method reference) (0) | 2024.03.15 |
[Java] 람다 작성법 (0) | 2024.03.14 |