Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

쉽지않은 블로그

[JAVA] Wrapper class 래퍼클래스란? 본문

프로그래밍언어/JAVA

[JAVA] Wrapper class 래퍼클래스란?

쉽지않네 2021. 4. 13. 01:29

래퍼 클래스 : 기본형 타입을 참조형 타입(객체)으로 사용하기 위해 만든 클래스

기본형 타입 (byte , short , int , long , float , double , char , boolean) 

 

 

참고문헌 : https://www.w3schools.com/java/java_wrapper_classes.asp


기본형 타입인 int 를 굳이? 래퍼 클래스를 이용하여 객체화시키는 이유는?

 

아래는 ArrayList 클래스의 일부의 소스코드이다. 

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    private static final long serialVersionUID = 8683452581122892189L;
 
    /**
     * Default initial capacity.
     */
    private static final int DEFAULT_CAPACITY = 10;
 
    /**
     * Shared empty array instance used for empty instances.
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};
    
    ..
    ....
    
    transient Object[] elementData;
    
    private int size;
    ..
    ..
        private void add(E e, Object[] elementData, int s) {
        if (s == elementData.length)
            elementData = grow();
        elementData[s] = e;
        size = s + 1;
    }
    ..
    ..
    ..
}

 

ArrayList 를 보면 Object의 배열(EMPTY_ELEMENTDATA)을  가지고 있다.

add 메서드를 보면 인자를 Object로 받게 되는 것을 알 수 있다.

 

 

정수열 Arraylist를 사용하고 싶은데 계속 기본형 정수 타입인 int만 사용하게 된다면 

특정 메서드가 인자로 객체 타입만을 받도록 설계되어 있기 때문에  기본형 타입으로 ArrayList를 사용할 수 없을 것이다.

이러한 문제 때문에 래퍼 클래스가 생겼다고 볼 수 있다.

 


ArrayList<int> a = new ArrayList<>(); //컴파일 에러   Object 를 상속받은 객체만이 타입으로 사용될수 있음
ArrayList<Integer> b = new ArrayList<>(); //arrayList 생성

Integer num = new Integer(10); //wrapper class 생성

b.add(num); // arrayList 에 삽입

위의 두 선언 방법을 보면 특정 타입을 제너릭을 이용하여 새로운 ArrayList를 생성하고 있는 모습이다

위의 int를 ArrayList의 타입으로 선언하게 되면 int는 기본형 타입이기 때문에 컴파일 에러가 날것이다.

 

또한 Integer 타입"만" 인자로 받겠다고 선언한 b라는 ArrayList의 원소를 추가하기 위해서 num과 같이 생성하여 넣어 줄 수 있다.

 

기본형 타입을 굳이 래퍼 클래스로 바꿔준 후 이용하는 게 불편하기 때문에

 

 

JDK 1.5 에서는 AutoBoxing과 UnBoxing 이 추가되었다. 


AUTO BOXING & UNBOXING 

 

참고문헌 : http://www.tcpschool.com/java/java_api_wrapper

auto boxing 은  기본형을 래퍼로 (int-> Integer)

unboxing 은 래퍼를 기본형으로 (Integer ->int) 

연산자나 메서드 사용 시 자동으로 변환이 되는 기능을 말한다.

이러한 기능 덕분에 다음과 같은 문법들이 가능하다.

 

ArrayList<Integer> list = new ArrayList<>(); //arrayList 생성
int num = 10;

list.add(num); // arrayList 에 int 형 삽입시 내부에서 자동으로 래퍼클래스 Integer로 변환

int first = list.get(0); // get메소드의 Integer 반환값을 자동으로 first로 변환


int i = 10;
Integer j = new Integer(20);

int sum = i+j  덧셈연산시 자동으로 변환

 

 


문자열을 숫자로 바꿀 때 또한 기본형과 래퍼 클래스는 차이가 있다.

 

둘 다 각 래퍼 클래스의 static 메서드를 호출한다는 점에서 공통점이 있지만 

호출하는 메서드의 차이가 있다.

 

//문자열을 -> 기본형타입
int a = Integer.parseInt("10");
long b = Long.parseLong("10");

//문자열을 -> 래퍼 클래스
Integer a = Integer.valueOf("10");
Long b = Long.valueOf("10"); 

 

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[JAVA] Object 클래스  (0) 2021.04.14
[JAVA] 자바의 String  (0) 2021.04.13
[JAVA] 제네릭 이란?  (0) 2021.03.31
[JAVA] 컬렉션 이란?  (0) 2021.03.31
Comments