자바의 래퍼 클래스(wrapper class)는 기본 자료형(primitive data types)을 객체로 다루기 위해 사용되는 클래스입니다. 자바는 기본적으로 객체 지향 언어이지만, 성능 향상을 위해 여덟 가지 기본 자료형을 제공합니다: byte, short, int, long, float, double, char, boolean. 이 기본 자료형은 객체가 아니라서 객체 지향적인 기능을 직접 사용할 수 없습니다. 이를 보완하기 위해 각 기본 자료형에 해당하는 래퍼 클래스가 제공됩니다
래퍼 클래스의 종류
- Byte (for byte)
- Short (for short)
- Integer (for int)
- Long (for long)
- Float (for float)
- Double (for double)
- Character (for char)
- Boolean (for boolean)
래퍼 클래스의 사용 목적과 중요성
- 객체로의 변환(박싱, Boxing): 기본 자료형을 해당하는 래퍼 클래스의 객체로 변환할 수 있습니다. 이를 박싱(Boxing)이라고 합니다. 예를 들어, int 값을 Integer 객체로 변환할 수 있습니다.
- 객체에서 기본 자료형으로의 변환(언박싱, Unboxing): 래퍼 클래스의 객체를 다시 기본 자료형으로 변환할 수 있습니다. 이를 언박싱(Unboxing)이라고 합니다.
- 컬렉션 프레임워크 사용: 자바의 컬렉션 프레임워크(예: ArrayList, HashMap)는 객체만 저장할 수 있습니다. 따라서 기본 자료형 데이터를 컬렉션에 저장하려면 해당 래퍼 클래스를 사용해야 합니다.
- 유틸리티 메서드 제공: 래퍼 클래스는 기본 자료형과 관련된 다양한 유틸리티 메서드를 제공합니다. 예를 들어, Integer 클래스는 정수를 문자열로 변환하거나, 문자열을 정수로 파싱하는 메서드를 제공합니다.
- 널 값(Null) 사용: 기본 자료형은 널 값을 가질 수 없습니다. 반면, 래퍼 클래스를 사용하면 널 값을 가질 수 있는 객체를 생성할 수 있으므로, 데이터가 '없음'을 표현할 필요가 있을 때 유용합니다.
오토박싱 (Auto-boxing)
오토박싱은 기본 자료형의 값을 해당하는 래퍼 클래스의 객체로 자동 변환하는 과정입니다. 예를 들어, int 자료형의 값을 Integer 객체로 자동 변환하는 것입니다. 이 과정은 개발자가 직접 래퍼 클래스의 생성자를 호출하거나 valueOf 메서드를 사용하지 않아도 자동으로 이루어집니다.
예시:
Integer myInteger;
int myInt = 5;
// 오토박싱
myInteger = myInt; // 'int'가 'Integer'로 자동 변환됨
오토언박싱 (Auto-unboxing)
오토언박싱은 래퍼 클래스의 객체를 해당하는 기본 자료형의 값으로 자동 변환하는 과정입니다. 예를 들어, Integer 객체를 int 값으로 자동 변환하는 것입니다. 이 과정은 개발자가 래퍼 객체에서 값을 추출하기 위해 명시적으로 메서드를 호출하지 않아도 자동으로 이루어집니다.
예시:
Integer myInteger = new Integer(5);
int myInt;
// 오토언박싱
myInt = myInteger; // 'Integer' 객체가 'int' 값으로 자동 변환됨
중요성과 주의사항
- 코드 간소화: 오토박싱과 오토언박싱은 코드를 더 간결하고 읽기 쉽게 만듭니다.
- 성능 고려: 오토박싱과 오토언박싱 과정에서는 약간의 성능 오버헤드가 발생할 수 있습니다. 따라서 성능에 민감한 애플리케이션에서는 이를 고려해야 합니다.
- 널 값 주의: 오토언박싱을 사용할 때 래퍼 객체가 null인 경우 NullPointerException이 발생할 수 있습니다. 따라서 널 체크를 적절히 수행하는 것이 중요합니다.
- 복잡한 연산 주의: 때때로 오토박싱과 오토언박싱이 복잡한 연산에서 의도치 않은 결과를 초래할 수 있으므로, 이러한 상황에서는 변환 과정을 명확히 이해하고 있어야 합니다.
오토박싱과 오토언박싱은 자바의 객체 지향적 특성을 유지하면서 기본 자료형과 객체 간의 작업을 용이하게 해주는 유용한 기능입니다.
'백엔드 > Java' 카테고리의 다른 글
ExecutorService (0) | 2023.12.27 |
---|---|
[lombok]@Data 주의사항 (0) | 2023.12.26 |
lombok (0) | 2023.12.26 |
실수 계산이 정확하지 않은 이유 (2) | 2023.12.23 |
자바의 기본 자료형과 참조 자료형 (0) | 2023.12.22 |