이번 포스팅은 Java의 핵심 컨셉 중 하나인 Wrapper 클래스에 대해 알아보겠습니다. 이 포스트에서는 Wrapper 클래스의 개념을 이해하고, 이를 활용한 코드를 작성해보는 시간을 가질 예정입니다. 기본 데이터 타입을 객체로 다루는 래퍼 클래스는 매우 중요한 개념이므로, 이해하고 넘어가는 것이 중요합니다.
Wrapper 클래스란?
Wrapper 클래스는 기본 데이터 타입(primitive data type)을 객체로 다루기 위해 사용하는 클래스입니다. 즉, 기본 데이터 타입에 대한 '클래스 표현'을 제공합니다. 모든 기본 데이터 타입(byte, short, int, long, float, double, char, boolean)에는 해당하는 래퍼 클래스가 있습니다. 이들은 모두 java.lang 패키지에 속해 있습니다.
다음은 기본 타입과 이에 대응하는 래퍼 클래스입니다:
| 기본 타입 | 래퍼 클래스 |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
박싱(Boxing)과 언박싱(UnBoxing)
래퍼 클래스를 이용하면 기본 타입의 값을 갖는 객체를 생성할 수 있습니다. 이를 '박싱(Boxing)'이라고 합니다. 반대로, 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정을 '언박싱(UnBoxing)'이라고 합니다.
// 박싱
Integer boxedInt = new Integer(123);
// 언박싱
int unboxedInt = boxedInt.intValue();
그런데 JDK 1.5부터는 박싱과 언박싱이 필요한 상황에서 자바 컴파일러가 이를 자동으로 처리해 줍니다. 이렇게 자동화된 박싱과 언박싱을 '오토 박싱(AutoBoxing)'과 '오토 언박싱(AutoUnBoxing)'이라고 부릅니다.
// 오토 박싱
Integer autoBoxedInt = 123;
// 오토 언박싱
int autoUnboxedInt = autoBoxedInt;
래퍼 클래스의 활용
래퍼 클래스는 기본 타입의 값들을 객체로 다루어야 하는 경우에 유용합니다. 예를 들어, 컬렉션 객체들은 기본 타입을 저장하지 못하고 객체만 저장할 수 있으므로 이 때 래퍼 클래스를 사용할 수 있습니다.
예시 코드1
래퍼 클래스를 활용하여 기본 타입을 박싱하고 언박싱하는 간단한 코드를 살펴봅시다.
public class Main {
public static void main(String[] args) {
Integer i = new Integer(10); // 박싱
int n = i.intValue(); // 언박싱
System.out.println("박싱된 정수: " + i);
System.out.println("언박싱된 정수: " + n);
}
}
박싱된 정수: 10
언박싱된 정수: 10
예시 코드2
래퍼 클래스와 오토 박싱/언박싱을 활용하여 컬렉션에 기본 데이터 타입을 저장하고, 그 값을 꺼내는 예제를 살펴봅시다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>(); // Integer 객체를 저장할 ArrayList 생성
// 오토 박싱을 통해 int형 데이터를 Integer 객체로 변환하여 list에 추가
list.add(10);
list.add(20);
list.add(30);
// 오토 언박싱을 통해 list에서 Integer 객체를 꺼내와 int형 데이터로 사용
int n1 = list.get(0);
int n2 = list.get(1);
int n3 = list.get(2);
System.out.println("list에 저장된 첫 번째 정수: " + n1);
System.out.println("list에 저장된 두 번째 정수: " + n2);
System.out.println("list에 저장된 세 번째 정수: " + n3);
}
}
list에 저장된 첫 번째 정수: 10
list에 저장된 두 번째 정수: 20
list에 저장된 세 번째 정수: 30
위 코드에서는 ArrayList<Integer>를 선언하여 Integer 객체를 저장할 수 있는 ArrayList를 생성하였습니다. 이후, list.add(10);과 같이 직접적으로 int형 데이터를 추가하는데, 이때 Java의 오토 박싱 기능이 작동하여 int형 데이터가 자동으로 Integer 객체로 변환되어 ArrayList에 저장됩니다.
마찬가지로 int n1 = list.get(0);과 같이 ArrayList에서 객체를 꺼내올 때, Java의 오토 언박싱 기능이 작동하여 Integer 객체가 자동으로 int형 데이터로 변환됩니다.
이처럼 래퍼 클래스와 오토 박싱/언박싱 기능을 이용하면 기본 데이터 타입을 객체로 취급하여 다룰 수 있게 되어, Java 프로그래밍의 유연성을 더욱 높일 수 있습니다.
'개발 > Java' 카테고리의 다른 글
| JAVA_01~03_자바 프로그래밍의 기본, 변수와 자료형, 연산자 (0) | 2024.07.15 |
|---|---|
| [JavaScript] - for in 문 (0) | 2023.07.21 |
| Java의 StringBuilder/StringBuffer 클래스 (0) | 2023.07.20 |
| Java의 String 클래스 (0) | 2023.07.20 |
| Java의 Object 클래스 : toString(), equals(), hashCode() (0) | 2023.07.19 |