영벨롭 개발 일지

[Java]자바 래퍼 클래스 Wrapper Class 본문

Programming Language/Java

[Java]자바 래퍼 클래스 Wrapper Class

영벨롭 2023. 7. 23. 19:14

★ 래퍼 클래스 Wrapper Class

 자바의 데이터 타입은 크게 기본형(Primitive Type) 과 참조형(Reference Type)으로 구분할 수 있습니다. 

 기본형에는 byte, short, char, int, long, float, double, boolean 자료형이 있는데, 래퍼 클래스(Wrapper class)는 이러한 기본 자료형을 객체로 다루기 위한 클래스입니다. 

 프로그램에 따라 기본형 데이터를 객체로 취급해야 하는 경우가 있는데, 이러한 경우 기본형 데이터를 객체로 변환한 후 작업을 수행해야 합니다. 

 래퍼 클래스(Wrapper class)는 java.lang 패키지에 포함되어 있으며, 자바의 모든 기본형(Primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 

 래퍼 클래스 안에 기본 타입 값은 외부에서 변경이 불가능합니다. 

 

기본형 Primitive Type 래퍼 클래스 Wrapper Class
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

★ 래퍼 클래스를 사용하는 이유

  • 메서드에 전달된 arguments 를 수정하기 위해서는 참조형 변수로 변환해야한다. 
  • 기본 타입의 값에 대해 메소드를 사용하거나 null 값을 이용하기 위해 사용
  • 제네릭 Generic
    • 정해진 데이터 형식에 의존하지 않고, 클래스 외부에서 접근할 때의 재사용성을 높이기 위해 사용
    • 클래스 내부에서 타입을 지정하는 것이 아닌, 외부에서 사용자에 의해 지정되는 것
    • ex) ArrayList<Integer> list = new ArrayList<Integer>();
  • 문자열과의 형 변환 Casting
    • 기본형 데이터 ↔ 문자열 변환

★ 문자열과의 형 변환

public class WrapperClass {
    public static void main(String[] args) {
        Integer num = 10;
        String str;
        int primitiveNum;

        // 문자열로 변환
        str = num.toString();

        // 기본형으로 변환
        primitiveNum = Integer.parseInt(str);

        System.out.println(str); // 10
        System.out.println(primitiveNum); // 10
    }
}

★ 박싱 Boxing 과 언박싱 UnBoxing

 기본형에서 Wrapper 클래스로 변환하고 싶은 경우, 혹은 그 반대의 경우에 박싱과 언박싱을 합니다. 

 

 - 박싱 Boxing

 기본형의 데이터를 Wrapper 클래스의 인스턴스로 변환하는 과정을 박싱이라고 합니다. 

 - 언박싱 Unboxing

 Wrapper 클래스의 인스턴스에 저장된 값을 기본형의 데이터로 변환하는 과정을 언박싱이라고 합니다. 

 

 - 자동 박싱(AutoBoxing) 과 자동 언박싱(AutoUnBoxing)

 자바 컴파일러가 자동으로 박싱과 언박싱을 처리해줍니다.

 자동 박싱의 Wrapper 클래스 타입에 기본형 값이 대입될 경우, new 키워드를 사용하지 않고도 자동으로 Wrapper 클리스 인스턴스를 생성할 수 있습니다. 

 

- 박싱,언박싱 vs 오토박싱,오토언박싱

public class WrapperClass {
    public static void main(String[] args) {
        // Boxing & Unboxing
        Integer num1 = new Integer(10); // 박싱
        int num2 = num1.intValue(); // 언박싱

        // AutoBoxing & AutoUnboxing
        Character ch1 = 'A'; // 오토 박싱
        char ch2 = ch1; // 오토 언박싱

    }
}

 

- 박싱 vs 오토박싱 값 비교

 오토박싱으로 생성된 Integer 인스턴스는 같은 객체를 참조하고 있으므로 == 연산자로 비교할 경우 객체의 주소값을 비교하기 때문에 true 가 나옵니다. 반면 박싱으로 생성된 Integer 인스턴스는 서로 다른 객체를 참조하므로 false 가 나오게 됩니다. 

 때문에 박싱된 Wrapper 클래스의 인스턴스 내부 값 자체를 비교할 경우 equals() 메소드를 사용해야합니다. 

public class WrapperClass {
    public static void main(String[] args) {
        // AutoBoxing
        Integer n1 = 1;
        Integer n2 = 1;
        System.out.println(n1 == n2); // true
        System.out.println(n1.equals(n2)); // true

        // Boxing
        Integer n3 = new Integer(2);
        Integer n4 = new Integer(2);
        System.out.println(n3 == n4); // false
        System.out.println(n3.equals(n4)); // true

    }
}

 

반응형