Language/Java

[Java] 자바 API 클래스 - Wrapper 클래스

재은초 2024. 4. 13. 12:22
반응형

java.lang 패키지

  • java.lang 패키지는 자바에서 가장 기본적인 동작을 수행하는 클래스들의 집합이다. 따라서 자바에서는 java.lang 패키지의 클래스들은 import 문을 사용하지 않아도 클래스 이름만으로 바로 사용할 수 있다.

 

Wrapper 클래스

래퍼 클래스(Wrapper class)

  • 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있을 때, 기본 타입의 데이터를 먼저 객체로 변환한 후 작업을 수행해야 한다. 이렇게 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스(Wrapper class)라고 한다.
  • 래퍼 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어 준다.
  • 래퍼 클래스는 모두 java.lang 패키지에 포함되어 제공된다.
  • 자바의 기본 타입에 대응하여 제공하고 있는 래퍼 클래스는 다음과 같다. 참고로 래퍼 클래스 중에서 Integer 클래스와 Character 클래스만이 자신의 기본 타입과 이름이 다르다.

박싱(Boxing)과 언박싱(UnBoxing)

  • 래퍼 클래스(Wrapper class)는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없다. 그래서 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.
  • 아래와 같이 기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱(Boxing)이라고 하고, 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정을 언박싱(UnBoxing)이라고 한다.

오토 박싱(AutoBoxing)과 오토 언박싱(AutoUnBoxing)

  • JDK 1.5부터는 박싱과 언박싱이 필요한 상황에서 자바 컴파일러가 이를 자동으로 처리해 주는데, 이런 자동화된 박싱과 언박싱을 오토 박싱(AutoBoxing)과 오토 언박싱(AutoUnBoxing)이라고 부른다.
  • 오토 박싱을 이용하면 new 키워드를 사용하지 않고도 자동으로 인스턴스를 생성할 수 있고, 해당 래퍼클래스 메소드를 사용하지 않고도 오토 언박싱을 이용하여 인스턴스에 저장된 값을 바로 참조할 수 있다.
Integer num = new Integer(17); // 박싱 - Interger 클래스 선언
int n = num.intValue();        // 언박싱 - Interger 클래스의 intValue() 메소드
System.out.println(n);         // 17 

Character ch = 'X';            // Character ch = new Character('X'); : 오토박싱
char c = ch;                   // char c = ch.charValue();           : 오토언박싱
System.out.println(c);         // X
  • 오토 박싱과 오토 언박싱을 통해 기본 타입과 래퍼 클래스 간의 다양한 연산도 가능하다. 래퍼 클래스의 비교 연산도 오토언박싱을 통해 가능해지지만, 인스턴스에 저장된 값의 동등 여부 판단은 비교 연산자인 동등 연산자(==)를 사용해서는 안 되며, equals() 메소드를 사용해야만 한다.
  • 래퍼 클래스도 객체이므로 동등 연산자(==)를 사용하게 되면, 두 인스턴스의 값을 비교하는 것이 아니라 두 인스턴스의 주소값을 비교하게 된다. 따라서 서로 다른 두 인스턴스를 동등 연산자(==)로 비교하게 되면, 언제나 false 값을 반환되게 되므로, 인스턴스에 저장된 값의 동등 여부를 정확히 판단하려면 equals() 메소드를 사용해야만 한다.
public class Wrapper03 {
    public static void main(String[] args) {
        Integer num1 = new Integer(10);
        Integer num2 = new Integer(20);
        Integer num3 = new Integer(10);

        System.out.println(num1 < num2);       // true
        System.out.println(num1 == num3);      // false
        System.out.println(num1.equals(num3)); // true
    }
}

 

Reference

반응형