본문 바로가기

프로그래밍/자바

[자바/기본] Wrapper 클래스란? (Boxing, UnBoxing)

728x90
반응형
SMALL

Wrapper 클래스란?

  • 자바의 기본 자료형 (primitive type)을 감싸는 클래스
  • 기본자료형 : boolean, char, byte, short, int, long, float, double
  • Wrapper : Boolean, Char, Byte, Short, Integer, Long, Float, Double
  • 앞에가 대문자로 시작하면 Wrapper구나~ 로 본인은 인식
  • String 처럼 Wrapper클래스는 immutable (불변성)을 가진다.

 

Wrapper Class 의 계층도

출처: https://way2java.com/java-lang/wrapper-classes/


WHY Wrapper 클래스?

  • 기본 자료형의 변수의 값을 가지는 객체를 생성해야할때 사용할 수 있다.
  • EX) 자바의 메소드 혹은 ArrayList 같은 Collection 프레임워크 등 기본 자료형이 아닌 객체를 필요로 하는 경우가 있는데 이때 사용 될수 있다.
  • 따라서, 기본자료형의 값을 객체처럼 사용해야할때 필요하다

박싱(Boxing) & 언박싱(UnBoxing)

  • Boxing : 기본 자료형의 값을 Wrapper 객체로 만드는 과정 [EX) int -> Integer]
  • UnBoxing : Wrapper 객체에서 기본 자료형의 값으로 만드는 과정 [EX) Integer -> int]
  • 기본 자료형이라는 물건을 포장(Boxing)하고 포장을 푼다(UnBoxing)으로 이해했음
  • 예시
public class Main {
    public static void main(String[] args){
        // Integer 객체 선언 밑의 세가지 방법으로 선언 가능 = Boxing
        Integer i1 = new Integer(1);

        //Valueof() 는 Wrapper클래스의 static 메소드
        Integer i2 = Integer.valueOf(1);   //new 와 같은 동작
        Integer i3 = Integer.valueOf("1");  // String 값을 넣어도 가능


        int i1i = i1.intValue();    // unboxing Integer -> int

        // Wrapper 클래스 ==, != 를 통한 값 비교는 주소값으로 하게 된다.
        Integer i4 = Integer.valueOf(123);
        Integer i5 = Integer.valueOf(123);
        Integer temp = new Integer(123);
        System.out.println(i4 == temp);       // false
        System.out.println(i4 == i5);   //true => 불변성
        //따라서 값을 비교하고 싶다면 equals() 를 사용해야한다.
        //

        //AutoBoxing, AutoUnBoxing
        //Java 5 부터 Wrapper클래스의 AutoBoxing, AutoUnBoxing기능을 제공하게 되었다.
        Integer i6 = 110;   //autoBoxing
        Integer i7 = new Integer(110);
        int i8 = 110;

        System.out.println(i6 == i8);   //true
        System.out.println(i6 == i7); //false

        //equals()
        System.out.println(i6.equals(i7));  //true

        //한쪽이 기본 자료형이면 Wrapper Class 는 auto-unboxing 진행
    }
}

 


정리

  • Wrapper 클래스는 기본자료형을 값을 객체처럼 사용해야할 때 사용한다.
  • 박싱 + 언박싱 + Auto 에 대한 이해 필요
  • Wrapper클래스 끼리의 == 비교는 주소값임을 기억, 따라서 equals() 사용
  • 한쪽이 기본자료형이면 AutoUnBoxing이 동작 => 기본자료형이라도 equals() 는 사용 가능
728x90
반응형
LIST