Java Wrapper Classes
자바 래퍼 클래스 (Java Wrapper Classes): 개념 및 사용법
- *래퍼 클래스(Wrapper Classes)**는 자바에서 기본 데이터 타입(primitive data types)을 객체로 감싸는 클래스입니다. 기본 데이터 타입은 객체가 아니므로 객체가 요구되는 상황에서는 사용할 수 없습니다. 이 문제를 해결하기 위해 자바는 래퍼 클래스를 제공하며, 기본 타입을 객체로 다룰 수 있도록 합니다. 자바의 래퍼 클래스는 기본 타입에 대응하는 객체 타입을 제공합니다.
1. 자바의 기본 타입과 대응하는 래퍼 클래스
자바에는 8가지 기본 데이터 타입이 있으며, 각 타입에 대응하는 래퍼 클래스가 존재합니다.
기본 타입 (Primitive Type) | 래퍼 클래스 (Wrapper Class) |
---|---|
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
2. 래퍼 클래스의 사용 이유
2.1 객체가 필요한 경우
자바의 컬렉션 프레임워크(예: ArrayList
, HashMap
등)는 기본 타입을 직접 다룰 수 없고
객체만 다룰 수 있습니다. 이때 기본 타입을 객체로 변환하기 위해 래퍼 클래스를 사용합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 기본 타입은 ArrayList에 직접 저장할 수 없으므로 래퍼 클래스 사용
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10); // 자동으로 int -> Integer로 변환 (오토박싱)
numbers.add(20);
System.out.println(numbers); // 출력: [10, 20]
}
}
2.2 유틸리티 메서드 제공
래퍼 클래스는 기본 타입의 값을 문자열로 변환하거나, 문자열을 기본 타입으로 변환하는 등의 유틸리티 메서드를 제공합니다.
public class Main {
public static void main(String[] args) {
// 문자열을 기본 타입으로 변환
int num = Integer.parseInt("123");
System.out.println(num); // 출력: 123
// 기본 타입을 문자열로 변환
String str = Integer.toString(456);
System.out.println(str); // 출력: "456"
}
}
3. 오토박싱과 언박싱 (Autoboxing and Unboxing)
- *오토박싱(Autoboxing)**과 **언박싱(Unboxing)**은 자바 5부터 도입된 기능으로, 기본 타입과 래퍼 클래스 간의 자동 변환을 지원하는 기능입니다.
- 오토박싱(Autoboxing): 기본 타입이 자동으로 대응되는 래퍼 클래스로 변환되는 것.
- 언박싱(Unboxing): 래퍼 클래스의 객체가 자동으로 기본 타입으로 변환되는 것.
3.1 오토박싱 예제
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 오토박싱: int -> Integer로 자동 변환
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10); // int 타입이 Integer 객체로 변환되어 저장됨
numbers.add(20);
System.out.println(numbers); // 출력: [10, 20]
}
}
3.2 언박싱 예제
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10); // 오토박싱
numbers.add(20);
// 언박싱: Integer -> int로 자동 변환
int num = numbers.get(0); // Integer 객체가 int로 자동 변환됨
System.out.println(num); // 출력: 10
}
}
4. 래퍼 클래스의 주요 메서드
각 래퍼 클래스는 다양한 유틸리티 메서드를 제공하며, 특히 문자열을 기본 타입으로 변환하거나 기본 타입을 문자열로 변환하는 기능이 자주 사용됩니다.
4.1 parseXXX()
메서드
parseXXX()
메서드는 문자열을 해당 기본 타입으로 변환할 때 사용됩니다.
public class Main {
public static void main(String[] args) {
// 문자열을 int로 변환
int intValue = Integer.parseInt("123");
System.out.println(intValue); // 출력: 123
// 문자열을 boolean으로 변환
boolean boolValue = Boolean.parseBoolean("true");
System.out.println(boolValue); // 출력: true
}
}
4.2 valueOf()
메서드
valueOf()
메서드는 문자열을 래퍼 클래스 객체로 변환합니다.
public class Main {
public static void main(String[] args) {
// 문자열을 Integer 객체로 변환
Integer integerObject = Integer.valueOf("123");
System.out.println(integerObject); // 출력: 123
// 문자열을 Boolean 객체로 변환
Boolean booleanObject = Boolean.valueOf("true");
System.out.println(booleanObject); // 출력: true
}
}
4.3 toString()
메서드
toString()
메서드는 기본 타입이나 래퍼 클래스 객체를 문자열로 변환합니다.
public class Main {
public static void main(String[] args) {
int intValue = 123;
String intStr = Integer.toString(intValue); // int를 문자열로 변환
System.out.println(intStr); // 출력: "123"
Double doubleValue = 45.67;
String doubleStr = doubleValue.toString(); // Double 객체를 문자열로 변환
System.out.println(doubleStr); // 출력: "45.67"
}
}
5. 기본 타입과 래퍼 클래스의 차이점
특징 | 기본 타입 (Primitive Type) | 래퍼 클래스 (Wrapper Class) |
---|---|---|
메모리 사용 | 더 적은 메모리 사용 | 객체로 처리되므로 더 많은 메모리 사용 |
값 비교 | == 연산자를 사용한 값 비교 |
equals() 메서드를 사용한 값 비교 |
기본값 | 기본 값이 존재 (예: int 는 0) |
null 허용 (객체이기 때문에 기본값이 없음) |
컬렉션 사용 가능 여부 | 컬렉션에서 사용 불가 | 컬렉션에서 사용 가능 |
5.1 기본 타입 vs 래퍼 클래스 비교 예제
public class Main {
public static void main(String[] args) {
// 기본 타입
int x = 100;
int y = 100;
System.out.println(x == y); // true (값 비교)
// 래퍼 클래스
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true (같은 객체 참조)
Integer c = new Integer(100);
Integer d = new Integer(100);
System.out.println(c == d); // false (서로 다른 객체 참조)
System.out.println(c.equals(d)); // true (값 비교)
}
}
주의사항: ==
연산자와 equals()
메서드
==
연산자는 참조 비교를 수행하며, 두 객체가 같은 객체인지 여부를 확인합니다.equals()
메서드는 값 비교를 수행하며, 두 객체가 같은 값을 가지고 있는지 확인합니다.
6. null
과 래퍼 클래스
기본 타입은 null
값을 가질 수 없지만, 래퍼 클래스는 null
값을 가질 수 있습니다. 이로
인해, null
값이 필요하거나 객체로 데이터를 표현해야 하는 경우 래퍼 클래스를 사용합니다.
public class Main {
public static void main(String[] args) {
// 기본 타입은 null 값을 가질 수 없음
// int x = null; // 컴파일 오류 발생
// 래퍼 클래스는 null 값을 가질 수 있음
Integer y = null;
System.out.println(y); // 출력: null
}
}
7. 자주 사용하는 래퍼 클래스
7.1 Integer
Integer
클래스는int
타입을 감싸는 래퍼 클래스입니다.Integer.parseInt(String)
을 사용해 문자열을 정수로 변환할 수 있습니다.- `Integer
.toString(int)`을 사용해 정수를 문자열로 변환할 수 있습니다.
7.2 Double
Double
클래스는double
타입을 감싸는 래퍼 클래스입니다.Double.parseDouble(String)
을 사용해 문자열을 실수로 변환할 수 있습니다.Double.toString(double)
을 사용해 실수를 문자열로 변환할 수 있습니다.
7.3 Boolean
Boolean
클래스는boolean
타입을 감싸는 래퍼 클래스입니다.Boolean.parseBoolean(String)
을 사용해 문자열을 불리언 값으로 변환할 수 있습니다.Boolean.toString(boolean)
을 사용해 불리언 값을 문자열로 변환할 수 있습니다.
요약
- *래퍼 클래스(Wrapper Class)**는 자바의 기본 데이터 타입을 객체로 다루기 위한 클래스입니다.
- 자바에서 기본 타입과 래퍼 클래스 간의 변환은 **오토박싱(Autoboxing)**과 **언박싱(Unboxing)**을 통해 자동으로 이루어질 수 있습니다.
- 래퍼 클래스는 기본 타입을 컬렉션에 저장하거나 객체가 필요한 메서드에서 사용할 때 유용합니다.
parseXXX()
와valueOf()
같은 유틸리티 메서드를 제공하여 문자열과 기본 타입 간의 변환을 쉽게 할 수 있습니다.
래퍼 클래스는 객체와 기본 타입 간의 상호작용을 가능하게 하며, 기본 데이터 타입을 객체로 처리해야 하는 상황에서 유용하게 사용할 수 있습니다.