본문 바로가기
언어/Java

Wrapper Class

by 넬준 2022. 5. 10.

 

기본 개념

Java에서 Data type에는 primitive type과 reference type이 있다.

프로그램을 만들다보면, 이 primitive type의 데이터를 reference type으로 처리해야 하는 경우가 있다.

 

이런 경우를 위해 Java에는 Wrapper class라는 것이 있다.

Wrapper class는 이 primitive type의 데이터를 객체로 사용할 수 있게 해준다.

 

Primitive Type Reference Type
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

Boxing/Unboxing과 Auto-boxing/Auto-unboxing

 

primitive type의 데이터를 reference type으로 변환하는 것을 boxing,

반대로 reference type을 primitive type으로 변환하는 것을 unboxing이라 한다.

 

public void test() {
    Integer num1 = new Integer(1); //boxing
    int num2 = num1.intValue(); //unboxing 
}

 

Java 1.5버전 이후부터는 이를 편하게 하기 위해 boxing과 unboxing을 자동적으로 해주는 기능이 추가됐다.

 

public void test() {
    Integer num1 = 1; //auto-boxing
    Integer num2 = 2; //auto-boxing

    int sum = num1 + num2; //auto-unboxing
}

 

num1과 num2를 auto-unboxing하여 primitive type끼리의 연산을 수행한다.

 

 

특징

immutable

Wrapper class는 String class와 마찬가지로 immutable object이다.

 

private final int value;

 

Integer class 내부에 값을 담는 value 변수가 final로 선언된 것을 볼 수 있다.

처음, 인스턴스에 값이 정해지면, 해당 인스턴스에서는 더 이상 값을 바꿀 수 없다.

 

public void test() {
    Integer num = 3;
    changeValue(num);
    System.out.println("num = " + num);
}
public void changeValue(Integer num) {
    num += 7;
}

 

출력값이 10이 될 것 같지만 3이 출력된다. 

 

값 비교 시 equals() 사용

Wrapper class 내부의 값끼리 비교할 때 ==을 사용하면 참조값을 비교하게된다.

따라서, 내부 값을 비교하고 싶을 땐 String class와 마찬가지로 equals()를 사용하면 된다.

 

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

 

Integer class의 equals()를 보면 값 비교를 하게끔 overriding된 것을 확인할 수 있다.

 

 

 

 


참고

https://yaboong.github.io/java/2018/05/26/java-memory-management/

http://www.tcpschool.com/java/java_api_wrapper

'언어 > Java' 카테고리의 다른 글

생성자  (1) 2022.05.11
static  (0) 2022.05.10
Class 클래스  (0) 2022.04.01
String Constant Pool  (0) 2022.03.25
Overriding 오버라이딩  (0) 2022.03.14

댓글