Java Collection - Wrapper 클래스

강서진·2023년 11월 17일
0

Java

목록 보기
20/35
post-custom-banner

강좌 Course 2. Part 2. ch1 1~3강 요약

Collection Framework API는 여러 개의 데이터를 핸들링하는 인터페이스와 API들을 모아둔 것이다. Collection은 자바가 제공하는 데이터구조이며, 저번에 써보았던 ArrayList 등이 이에 속한다. 이 API들은 데이터 추가, 수정, 검색 등의 공통적인 동작들을 가지고 있다.

Wrapper 클래스

Collection API가 가지고 있는 Wrapper 클래스는 기본 데이터타입을 객체로 다룰 수 있도록 만들어진 클래스이다. 실제 Wrapper 라는 이름의 클래스가 존재하는 건 아니다. Collection 에는 객체를 넣어야하기 때문에 기본자료형을 객체로 다룰 수 있게 하는 클래스들을 통칭하는 것이다.
기본 데이터타입들의 첫글자를 대문자로 쓰고, 줄여쓴 것은 줄이지 않은 상태로 적으면 wrapper 클래스가 된다.

byte -> Byte
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Character
boolean -> Boolean

wrapper 클래스를 사용하면 자동으로 박싱과 언박싱이 이루어진다. 박싱은 기본 데이터타입을 wrapper 클래스 객체로 변환하는 것이고, 언박싱은 객체를 기본 데이터타입으로 변환하는 것이다.

public class WrapperTest {
    public static void main(String[] args) {
        // 정수형 변수에 10을 저장
        int a = 10; // 기본자료형
//        Integer aa = new Integer(10); // 사용자정의 자료형

        Integer aa = 10; // auto-boxing
        System.out.println(aa.intValue());

        Integer bb = 20; // auto-boxing
        int b = bb; // auto-unboxing
    }
}

박싱을 할 때 Integer 객체 intObj에 바로 10을 넣는다고 하면, 인스턴스를 받을 수 있지 기본 자료형을 받을 수 있는 게 아니라서 new Integer(10);으로 자동으로 변환해서 받는다. 이것이 auto-boxing이다.
이렇게 기본 자료형과 wrapper 클래스는 자동으로 박싱, 언박싱이 되기 때문에 혼용하여 사용해도 문제없다.

숫자와 문자열의 상호변환

문자열 숫자를 정수로 변환하거나, 정수를 문자열 숫자로 변환해야 할 때가 있다. 이러한 동작들은 int의 wrapper 클래스와 String이 가지고 있다.

문자열 -> 정수
Integer.parseInt(문자열)
정수 -> 문자열
String.valueOf() 또는 ""+(정수)

public class IntegerStringTest {
    public static void main(String[] args) {
        // String to integer
        String str1 = "123";
        String str2 = "456";
        System.out.println(str1+str2); // Concatenation
        
        int num = Integer.parseInt(str1)+Integer.parseInt(str2);
        System.out.println(num);

        // interger to String
        int num1 = 123;
        int num2 = 456;
        System.out.println(num1+num2); // Addition

        // #1 valueOf
        String str = String.valueOf(num1)+String.valueOf(num2);
        System.out.println(str);
        
        // #2 using quotation marks
        str = ""+num1+num2;
        System.out.println(str);
    }
}

wrapper 클래스를 사용하면 객체를 받는 ArrayList에도 편리하게 기본자료형 데이터를 저장하고 받아올 수 있다.

public class CollectionBasic {
    public static void main(String[] args) {
        // ArrayList에 10, 20, 30, 40, 50 의 5개 정수를 저장 및 출력
        // ArrayList는 Object[]기 때문에 int를 넣을 수 x
        // Integer(Wrapper class)로 넣어야 함 --> auto-boxing으로 그냥 입력해도 알아서 변환되어 들어감
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10); // 내부에서 new Integer(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(50);

        // auto-unboxing으로 int로 Integer를 받을 수 있음
        for (int num:list){
            System.out.println(num);
        }
    }
}
post-custom-banner

0개의 댓글