[Java] Primitive Wrapper Class
Wrapper Class는 primitive data type을 캡슐화하는 클래스이며, 다른 클래스의 객체 인스턴스 및 메소드를 만들기 위해 사용한다.
Primitive Data Type에 Object처럼 사용하기 위해 Class로 바인딩시키는 역할이라고 할 수 있다.
1️⃣ primitive type은 class의 generic으로 사용할 수 없고, 2️⃣Object의 하위 클래스를 요구하는 메소드가 있을 때
일반 primitive data type을 Wrapper class로 감싸서 사용한다.
일단 primitive data type을 이용하면 일정 단위의 데이터 저장을 위해 Array만을 이용할 수 있지만, 원시 데이터 타입을 wrapper class로 감싸면 java의 다양한 collection을 이용할 수 있다.
따라서 Wrapper Class는 주로 Primitive Data Type을 저장할 Java API의 Collection 클래스의 객체를 만드는데 사용된다.
Primitive Type | Wrapper Class | Constructor Arguments |
byte | Byte | byte or String |
short | Short | short or String |
int | Integer | int or String |
long | Long | long or String |
float | Float | float, double or String |
double | Double | double of String |
char | Character | char |
boolean | Boolean | boolean or String |
위와 같이 Wrapper Class는 8개가 존재하고, Boolean과 Character를 제외한 class들은 Number Class를 상속받는다.
이 때 primitive data를 wrapper class 인스턴스로 변환하는 작업을 Boxing, 그 반대를 Unboxing이라고 한다.
JDK 1.5버전 부터는 Java Compiler가 박싱과 언박싱을 자동으로 처리해주는 Auto Boxing, Auto Unboxing이 지원된다
public class Wrapper02 {
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
}
}
//출처: http://www.tcpschool.com/java/java_api_wrapper
물론 Wrapper Class의 Instance의 value가 같다고 해서 (==)연산자의 결과값이 true인 것은 아니다(인스턴스의 주소 값을 비교하기 때문).
wrapper class의 instance의 동등 비교를 하기 위해서는 equals() 메소드를 사용해야 한다.
이 때 명확히 구분해야 하는 것은 Primitive Wrapper Class가 Primitive Type임을 의미하지 않는다는 점 이다.
Wrapper Class는 data type이 할당된 변수와는 달리, primitive data type을 상속받음과 동시에 캡슐화로 숨기면서 인스턴스화된 객체 및 메소드를 정의한다.
참고 자료:
www.tcpschool.com/java/java_api_wrapper