늦은 프로그래밍 이야기
Wrapper 클래스 본문
래퍼 클래스 (Wrapper Class)
- 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스. (java.lang 패키지에 포함)
- 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있다.
- 예를 들어, 메소드의 인수로 객체 타입만이 요구되면, 기본 타입의 데이터를 먼제 객체로 변환한 후 작업을 수행해야 한다.
종류
- Integer 클래스와 Character 클래스만 기본 타입과 이름이 다름.
| 기본 타입 | 래퍼 클래스 |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
Auto Boxing, Unboxing

Auto Boxing
- 자바 컴파일러가 기본 타입의 데이터를 그에 상응하는 래퍼 클래스로 자동 변환 시켜 주는 것.
public static void main(String[] args) {
char ch = 'j';
autoBoxing(ch);
int i = 7;
autoBoxing2(i);
}
public static void autoBoxing(Character chr) {
System.out.println(chr.getClass() + " : " + chr); // class.java.lang.Character : j
}
public static void autoBoxing2(Integer I) {
System.out.println(I.getClass() + " : " + I); // class.java.lang.Integer : 7
}
Unboxing
- 자바 컴파일러가 래퍼 클래스를 기본 타입의 데이터로 자동 변환 시켜 주는 것.
public static void main(String[] args) {
Character chr = 'c';
unBoxing(chr);
Integer I = 2;
unBoxing2(I);
}
public static void unBoxing(char ch) {
System.out.println(ch); // c
}
public static void unBoxing2(int i) {
System.out.println(i); // 2
}
래퍼 클래스 연산
기본연산
public static void main(String[] args) {
Integer num1 = new Integer(7); // 박싱
Integer num2 = new Integer(3); // 박싱
int int1 = num1.intValue(); // 언박싱
int int2 = num2.intValue(); // 언박싱
Integer result1 = num1 + num2; // 10
Integer result2 = int1 - int2; // 4
int result3 = num1 * int2; // 21
}
}
- 기본 타입과 래퍼 클래스 간의 다양한 연산도 가능.
비교연산
public static void main(String[] args) {
Integer num1 = new Integer(10);
Integer num2 = new Integer(20);
Integer num3 = new Integer(10);
System.out.println(num1 < num2); // true
System.out.println(num1 == num3); // false
System.out.println(num1.equals(num3)); // true
}
}
- 래퍼 클래스의 비교 연산도 가능.
- 래퍼 클래스도 객체이므로 '==' 연산자를 사용하면 두 인스턴스의 값을 비교하는 것이 아니라 두 인스턴스의 주소값을 비교하게 된다.
- 비교 연산자 '=='을 사용해서는 안되고, .equals() 메소드를 사용해야 한다.
'내일배움캠프 > Java 심화' 카테고리의 다른 글
| Thread (0) | 2022.12.02 |
|---|---|
| 추상클래스 vs 인터페이스 (0) | 2022.12.01 |
| Mutable, Immutable (0) | 2022.12.01 |
| 필드, 메소드의 구분 / Block / Scope (0) | 2022.11.30 |
| JVM 구조 (0) | 2022.11.30 |
Comments