래퍼 클래스 wrapper class

myminimin·2023년 8월 8일
0

JAVA

목록 보기
15/21
post-custom-banner

래퍼 클래스(wrapper class)는 기본 타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스이다. 래퍼 클래스는 모두 java.lang 패키지에 포함되어 제공되기 때문에 별도의 패키지 불러오기 없이 곧바로 소스 단에서 사용이 가능하다.

래퍼 클래스를 이용하면 각 타입에 해당하는 데이터를 파라미터로 전달받아 해당 값을 가지는 객체로 만들어준다.

기본 자료형래퍼 클래스기본 자료형래퍼 클래스
booleanBooleanintInteger
charCharacterlongLong
byteBytefloatFloat
shortShortdoubleDouble

대부분의 래퍼 클래스는 기본 타입의 첫 번째 단어를 대문자로 바꿔준 이름을 사용하지만 Integer와 Charater 클래스만이 자신의 기본 타입과 이름이 약간 다르다는 점을 기억하자.


래퍼 클래스는 값을 포장하여 객체로 만드는 것 이다.

값을 포장하여 객체로 만든 후에 값을 더하거나 변환시켜야 할 필요가 생기는 경우에는 어떻게 해야할까? 😲

이때는 포장을 다시 뜯어야 할 필요가 있다! 이러한 행위를 박싱(Boxing)언박싱(UnBoxing) 이라고 한다.

  1. Boxing: 기본 타입의 데이터 -> 래퍼 클래스의 인스턴스로 변환

  2. UnBoxing: 래퍼 클래스의 인스터스에 저장된 값 -> 기본 타입의 데이터로 변환

    래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니다. 생성된 인스턴스의 값만을 참조할 수 있기 때문에 래퍼 클래스 인스턴스에 저장된 값을 직접 변경할 수는 없다. 그래서 래퍼 클래스를 언박싱 한 뒤에 값을 변경하고 다시 박싱해야 하는 중간 단계가 필요하다!


자동 박싱(AutoBoxing) & 자동 언박싱(AutoUnBoxing)

JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱을 자동으로 처리해주기 시작했다!
기본타입 값을 직접 박싱, 언박싱하지 않고 래퍼 클래스 변수에 대입만 하면 자동으로 박싱과 언박싱이 된다 😮

  /* 기존 박싱 & 언박싱 */
  Integer num = new Integer(15); // 박싱
  int n = num.intValue();        // 언박싱
  
  /* 오토 박싱 * 언박싱 */
  Integer num = 15; // new Integer() 생략
  int n = num; // intValue() 생략

이처럼 오토 박싱을 이용하면 new 키워드를 사용하지 않고도 자동으로 인스턴스를 생성할 수 있으며, 언박싱 메서드도를 사용하지 않고도 오토 언박싱을 이용하여 인스턴스에 저장된 값을 바로 참조할 수 있다.

래퍼 클래스 동등 비교

오토 언박싱을 통해 객체 값을 더하고 빼고는 문제 없지만, 객체 값을 비교할 때는 포장 내부의 값을 얻어서 비교해야 하기 때문에 직접 언박싱을 해서 비교하거나 equals() 메서드를 통해서 비교해야 한다.

대신 래퍼 클래스와 기본 자료형과의 비교는 자동으로 오토박싱, 언박싱을 해주기 때문에 == 연산과 equals() 연산 모두 가능하다.

Integer num1 = new Integer(10); // 래퍼 클래스
Integer num2 = new Integer(20);
Integer num3 = new Integer(10);
int i = 10; // 기본타입

 /* 연산은 문제 없다 */
System.out.println(num1 < num2); // true
System.out.println(num1 < num2); // 30

/* 래퍼 클래스의 객체 값 비교 */
System.out.println(num1 == num3);      // false
System.out.println(num1.equals(num3)); // true

/* 래퍼 클래스와 기본 자료형과의 비교 */
// 래퍼클래스 == 기본타입
System.out.println(num1 == i); // true

// 래퍼클래스.equals(기본타입)
System.out.println(num1.equals(i)); // true

// 래퍼클래스 == 래퍼 클래스
System.out.println(num1 == num3); // false

// 래퍼클래스.equals(래퍼클래스)
System.out.println(num1.equals(num3)); // true


                                
                                
post-custom-banner

0개의 댓글