래퍼 클래스(Wrapper class) :
프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있다. 예를 들, 메소드의 인수로 객체 타입만이 요구되면, 기본 타입의 데이터를 먼저 객체로 변환한 후 작업을 수행해야 한다. 이렇게 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스(Wrapper class)라고 한다. 래퍼 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어 주며 래퍼 클래스는 모두 java.lang 패키지에 포함되어 제공된다.
기본타입 | 래퍼클래스 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
박싱(Boxing)과 언박싱(UnBoxing)
래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니라서 인스턴스에 저장된 값을 변경할 수 없다. 대신 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값을 참조할 순 있다.
- 박싱(Boxing) : 기본 타입 데이터 → 래퍼 클래스 인스턴스로 변환
- 언박싱(UnBoxing) : 래퍼 클래스 인스턴스 → 기본 타입 데이터로 꺼내는 과정
Character ch = new Character('X'); //박싱
char c = ch.charValue(); // 언박싱
System.out.println(c);
Character ch = 'X'; // 오토박싱
char c = ch; // 오토언박싱
System.out.println(c);
박싱은 new 키워드, 언박싱은 charValue(); 혹은 intValue(); 같은 메서드를 한번 써야 하는데 오토언박싱은 그 과정이 생략 가능해 방법이 간단해진다.
오토박싱과 언박싱을 통해 연산과 비교도 할 수 있다.
package Lang;
public class wrapperTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer num1 = new Integer(7); // 박싱
Integer num2 = new Integer(3); // 박싱
Integer num3 = new Integer(7); // 박싱
int int1 = num1.intValue(); // 언박싱
int int2 = num2.intValue(); // 언박싱
Integer result1 = num1 + num2; // 10
Integer result2 = int1 - int2; // 4
int result3 = num1 * int2; // 21
// 오토 박싱과 오토 언박싱을 통해 기본 타입과 래퍼 클래스 간의 연산도 가능
System.out.println(num1 < num2); // true
System.out.println(num1 == num3); // false
System.out.println(num1.equals(num3)); // true
// 래퍼 클래스도 객체라 ==를 사용하게 되면 두 인스턴스의 주소값만을 비교한다.
// 따라서 equals 로 해줘야 한다.
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크 - ArrayList (0) | 2023.03.07 |
---|---|
[JAVA] 컬렉션 프레임워크 (collection framework) (0) | 2023.03.06 |
[JAVA] lang package - StringBuilder & StringBuffer (0) | 2023.03.04 |
[JAVA] lang package - String (0) | 2023.03.04 |
[JAVA] lang package - object (0) | 2023.03.04 |