래퍼 클래스 (Wrapper Class)
래퍼 클래스는 기본형의 객체 버전이다. 자바는 기본형 데이터를 객체로 다룰 수 있는 래퍼 클래스를 제공한다.
기본형 (Primitive Type) | 래퍼 클래스 (Wrapper Class) |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
기본형의 한계와 래퍼 클래스의 필요성
자바에서 래퍼 클래스는 왜 사용하는 것일까?
자바는 객체 지향 언어이다. 그러나 자바에도 객체가 아닌 타입이 존재하는 데 바로 기본형(Primitive type)이다.
기본형의 한계는 다음 두가지가 있다. 첫째, 객체가 아니다. 둘째, 기본형은 항상 값을 가진다.
첫째로 기본형은 객체가 아니다. 단순한 데이터 조각으로 객체 처럼 메소드를 가질 수 없다. 예를 들어, 숫자를 비교하는 간단한 기능도 기본형은 외부 메서드를 사용해야 한다. 래퍼 클래스를 활용해 객체로 만들면 내부에 정의한 메서드를 편리하게 호출하여 사용할 수 있다.
다음으로 기본형은 항상 값을 가져야 한다. 좋은 제약이지만 값이 없어야 할 경우를 표현해야 하는 경우가 있다. 초기화되지 않은 기본형 변수는 자동으로 0 또는 false로 설정되지만 0 과 false 또한 값으로 값이 없는 상태를 표현할 수 없다. 이 때 객체는 null을 사용한다. 래퍼 클래스를 사용하면 기본형도 null 값을 처리할 수 있다.
오토 박싱과 오토 언박싱
기본형을 래퍼 클래스로 변경하는 것을 박싱, 래퍼 클래스를 기본형으로 변경하는 것을 언박싱이라 한다.
public class WrapperClassMain {
public static void main(String[] args) {
// 박싱
Integer newInteger = new Integer(10); // 미래에 삭제 예정, 대신에 valueOf() 사용
Integer integerObj = Integer.valueOf(10); // -128 ~ 127 자주 사용하는 숫자 값 재사용, 불변
// 언박싱
int intValue = integerObj.intValue();
}
}
박싱과 언박싱 기능을 자주 사용하기 때문에 자바는 오토 박싱(Auto-boxing), 오토 언박싱(Auto-Unboxing)을 지원한다. 컴파일러가 자동으로 valueOf, xxxValue() 등의 코드를 추가해주는 기능이다.
public class AutoboxingMain {
public static void main(String[] args) {
// 기본형 -> 래퍼 클래스
int value = 7;
Integer boxedValue = value; // 오토 박싱
// 래퍼 클래스 -> 기본형
int unboxedValue = boxedValue; // 오토 언박싱
}
}
래퍼 클래스 주요 메서드
public class WrapperUtilsMain {
public static void main(String[] args) {
Integer i1 = Integer.valueOf(10); // 숫자, 래퍼 객체 반환
Integer i2 = Integer.valueOf("10"); // 문자열, 래퍼 객체 반환
int intValue = Integer.parseInt("10"); // 문자열 전용, 기본형 반환
//비교
int compareResult = i1.compareTo(20);
// 산술 연산
System.out.println("sum: " + Integer.sum(10, 20));
System.out.println("min: " + Integer.min(10, 20));
System.out.println("max: " + Integer.max(10, 20));
}
}
valueOf() | 래퍼 객체를 반환한다. 숫자, 문자열 모두 지원 |
parseInt() | 문자열을 기본형으로 변환 |
compareTo() | 내 값과 인수로 넘어온 값 비교.( 크면 1, 같으면 0, 작으면 -1 반환) |
Integer.sum(), Integer.min(), Integer.max() | 간단한 산술 연산 기능 |
정리
래퍼 클래스는 자바에서 기본형을 객체로 변환한다. 기본형이 가진 한계를 보완하고 유틸리티 메서드, null 값 처리 등 기본형을 보다 유연하게 사용할 수 있게 한다.
참고
'Tech Stack > Java' 카테고리의 다른 글
[Java] 컬렉션 프레임워크 List와 의존 관계 주입 (0) | 2024.08.16 |
---|---|
[Java] Enum 클래스 (0) | 2024.08.14 |
[Java] String 클래스와 주요 메서드 (0) | 2024.08.13 |
[Java] 불변 객체 (Immutable Object) (0) | 2024.08.12 |
[Java] Object 클래스와 객체 지향 (0) | 2024.08.11 |