본문 바로가기
Java

Java - Wrapper Class란

by 오늘부터개발시작 2022. 8. 8.

Wrapper Class

자바를 공부하다보면 Wrapper Class라는 용어를 듣게 된다. Wrapper 클래스는 이름 그대로 감싸고 있는 클래스이다. 여기서 감싸는 대상은 자바의 자료형 중에 기본형이다. 자바의 자료형은 크게 기본 타입과 참조타입으로 나누어지는데 기본 타입을 감싸서 참조타입으로 만들어준다. 자바의 기본 타입은 소문자로 시작하는데 int, char, float, double, boolean 등이 있고 이외의 것들은 모두 참조형이라고 생각하면 된다. 예를 들면 int -> Integer, double -> Double, boolean -> Boolean이 있다. 

 

참조 - https://coding-factory.tistory.com/547

Boxing, UnBoxing

Primitive 기본형 타입과 객체형 타입끼리 형 변환을해주는 것을 박싱, 언박싱이라고 한다. 기본 타입을 객체타입으로 만드는 것을 박싱이라고하고 반대로 하는 것을 언박싱이라고 한다. 다른 언어들에서는 float32, float64, double 등등 비슷한 자료 구조가 많아서 쓸 때마다 형변환을 해줘야하는 귀찮음이 있지만 자바에서는 자동으로 박싱과 언박싱을 해준다. 예를 들어서 Intenger a에 int b를 대입하면 자동으로 언박싱을 해주고 Intenger 객체가 자동으로 생성이 된다. 반대의 경우도 자동으로 박싱을 해준다.

 

public static void main(String[] args)  {
    Integer num = 5; // 자동 박싱
    int n = num; // 자동 언박싱
}

 

그리고 각각의 Wrapper class는 형변환을 위한 기본 메소드들을 가지고 있는데 많이들 사용해본 Integer.parseInt()같은 메소드들이다. 이는 String -> Integer를 위한 메소드이고 반대로는 String.valueOf(15) 같은 메소드로 형변환을 할 수 있다. 기본적으로 모두 String에서 Wrapper Class로 형변환을 해주는 메소드를 갖고 있으니 잘 사용하면 좋다.

 

값 비교

Wrapper Class의 값을 비교할 때는 Primitive type과 다르게 == 연산자를 사용할 수 없다. 이는 Wrapper Class는 객체이기 때문인데 객체는 == 연산자를 사용하면 주소값만 비교하기 때문에 실제 값이 같은지 다른지 알수가 없다. 그래서 Wrapper Class는 equals를 사용해서 내부의 값을 직접 비교해야한다. 참고로 Primitive Type과 객체타입끼리 비교는 ==과 equals를 모두 사용 가능한데 이유는 자동으로 박싱, 언박싱을 해주기 때문이다.