본문 바로가기
IT/Java

자바 래퍼 클래스(wrapper class)란 무엇인가!!

by flatsun 2019. 2. 13.
반응형

래퍼 클래스(wrapper class) 하면

수업 성실하게 들은 사람들이 아닌 이상


어.. 듣긴 들었는데 그게 뭐였더라


이런 반응이 나올텐데


이런 반응이 나오는 것이 당연하다


강사나 교수들이 존나 대충 알려주고

이해도 못했는데


알아들었죠? 다음~ 이러고 넘어가서

제대로 이해하지 못했기 때문이다


못난 강사는 있어도

못난 학생은 없다고


wrapper 클래스에 대해 한번 알아보자



wrapper class 하면 

딴건 몰라도 이 그림은 많이 봤을건데


저기 써져있는 Simple type이 

Primitive Type이다


설명할때 이거 보여주고 한번 설명 슥 해준다음에

알아들었죠~


그럼 20000~~ 이러고 넘어가기 때문이다


그래서 나중에 생각해보면 wrapper class가 무엇인지 전혀 생각이 안 나는데


일단 wrapper 클래스란??


primitive type(int, long, float, double ...) 을 객체화한 형태가

wrapper class인데 


wrapper type으로 정의하는 방법을 한번 봐보자


Integer 변수명 = new Integer(값);

뭔가 생각나지 않나?


이거 완전 객체화랑 똑같은데?


그래서 wrapper class로 정의를 하면 객체처럼 메소드를 사용할 수 있다


1
2
3
4
5
6
7
8
9
10
11
12
13
    public static void main(String[] args) {
        
        Integer a = new Integer(3);
        
        System.out.println(a.MIN_VALUE);
        System.out.println(a.MAX_VALUE);
        
    }
 
// 출력 시..
-2147483648
2147483647
 
cs


래퍼 타입으로 정의 시 자연스레 메소드를 사용하는 모습이 보이는데


래퍼 클래스는 뭐다?? 

Primitive Type의 객체화다!!


그래서 래퍼 클래스로 정의하면 메소드를 사용할 수 있는 것!!


이제 바로 Boxing, Unboxing으로 넘어간다


이것도 처음에 들으면 뭐???

이러고 이해가 안되는데


되게 간단하다


먼저 Boxing은 


Primitive Type을 Wrapper class로 바꾸는 것이고


Unboxing은


Wrapper class를 Primitive Type으로 바꾸는 것이다!!!


예제를 통해 알아보자


1
2
3
4
5
6
7
8
9
10
11
12
    public static void main(String[] args) {
        
        Integer a = new Integer(3);
        int b = 3;
        
        Integer c = (Integer) b; // 이것은 boxing
        int d = (int) a; // 이것은 Unboxing
        
        int e = a; // 자동으로 된다!!
        Integer f = b; // 자동으로 된다!!
        
    }
cs


Primitive Type인 int b를 Wrapper type인 Integer c에 넣을 때

타입이 달라서 (Integer)를 붙여줘야 한다


이게 Boxing이고


Wrapper type인 Integer a를 int d에 넣을 때

타입이 달라서(int)를 붙여주는데


이게 Unboxing이다



근데 하단에 e하고 f를 보면

그딴거 안붙여도 에러없이 잘만 들어가는데????


JDK 1.5 버전으로 들어와서

저딴거 안붙여도 자동으로 Boxing과 Unboxing이 되게 바뀌었는데


이걸 Auto Boxing, Unboxing이라 한다.


즉 Boxing과 Unboxing은 개념만 알아놓으면 된다는 것이다


왜냐?? 알아서 바꿔주니까!!!!


이제 wrapper class의 특징을 두개 더 알아보자


먼저 하나는

래퍼 클래스는 제네릭 사용 시 필수로 들어가는데


제네릭이란!?


<>를 생각해보면 된다



보면 제네릭 안에 Wrapper class를 사용할 경우

정의가 제대로 잘 되지만


primitive type을 사용할 경우 에러가 뜬다


즉 제네릭 안에 객체 자료형을 쓸 때는

무조건 Wrapper class를 사용해야 한다는 것이다!!!


다음으로는 wrapper class에는 null이 들어가지는데



Primitive type인 int는 짤없이 에러가 뜨지만

wrapper class는 에러가 뜨지 않는다!!!


이제 바로 면접용 압축 요약 들어가는데


1. Wrapper class란?

- Primitive Type를 객체화 한것!!!, 메소드도 사용 가능하다!!


2. Boxing과 Unboxing이란?

- Boxing = Primitive type을 Wrapper Type으로 바꾸는 것 (Integer) a

- Unboxing = Wrapper Type을 Primitive Type으로 바꾸는 것 (int) a

- 요즘은 이런거 안해도 AUTO로 Boxing과 Unboxing이 된다!!


3. Wrapper class를 사용하는 이유는?

- 제네릭( < > ) 안에 Wrapper class만 들어가기 때문!!!

- Wrapper class는 Primitive Type과 다르게 null도 넣을 수 있기 때문!!

반응형

댓글