JAVA Wrapper 클래스

‍박소연·2025년 5월 21일

자바는 객체지향 언어임에도 성능을 위해 8개의 기본형을 객체로 다루지 않는다. 하지만, 때로는 기본형 변수도 객체로 다뤄야 하는 경우가 있다.

Wrapper 클래스

기본형 값을 객체로 다룰 수 있게 하는 클래스

Integer num1 = new Integer(100);
Integer num2 = new Integer(100);

num1 == num2; // 참조형과 참조형 비교 false
  • 객체이므로 비교 연산자를 사용시, 주소값을 비교하게 됨

오토박싱

  /* 기존 박싱 & 언박싱 */
  Integer num = new Integer(17); // 박싱
  int n = num.intValue();        // 언박싱

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

비교 연산

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

Integer num = new Integer(10); // 래퍼 클래스1
Integer num2 = new Integer(10); // 래퍼 클래스2
int i = 10; // 기본타입

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

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

// 래퍼클래스 == 래퍼클래스
System.out.println(num == num2); // false (invalid)

// 래퍼클래스.equals(래퍼클래스)
System.out.println(num.equals(num2)); // true

NullPointerException

wrapper 객체가 null인 상태에서 auto-unboxing이 일어난 경우

Integer num = null;
int x = num; // 여기서 NullPointerException 발생!

해결방법

  1. null 체크
  if (num1 != null) {
      int result = num1 + 5;
  } else {
      System.out.println("num1이 null입니다.");
  }
  1. Optional 클래스
	Integer num1 = null;
    int result = Optional.ofNullable(num1).orElse(0) + 5;
    System.out.println(result);  // 5 출력

성능 이슈

단지 똑같은 자료값을 저장하지만 어떤 타입 방식으로 선언했느냐에 따라 어플리케이션 성능 차이가 있다.

작성한 코드에 불필요한 auto casting이 반복적으로 이루어지고 있는지 확인해야한다.

0개의 댓글