java.lang패키지(7) - 래퍼(Wrapper) 클래스
1. 래퍼(Wrapper) 클래스
- 때로는 기본형 변수도 어쩔 수 없이 객체로 다뤄야 할 때, 기본형 값들을 객체로 변환하여
작업을 수행해야 한다. 이때, 사용되는 것이 래퍼 클래스이다.
- 래퍼 클래스를 이용하면 기본형 값을 객체로 다룰 수 있다.
- 래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받는다.
이 때, 주의해야 할 것은 각 자료형에 알맞은 문자열을 사용해야 한다는 것이다.
- 예를 들어, new Integer("1.0")을 실행하면 NumberFormatException이 발생한다.
1-1. 래퍼 클래스의 생성자들
- Boolean, Character, Byte, Short, Integer, Long, Float, Double 이 있는데, 모두 생성자를 만들 수 있다.
- 주의할 점은 모두 앞에 대문자이다.
- 또한 래퍼 클래스를 이용해서 아래의 코드처럼 상수 사용도 가능하다.
1-2. Number 클래스
- Number 클래스는 기본적으로 객체가 가지고 있는 값을 숫자와 관련된 기본형으로 변환하여 반환하는 메서들을
정의한다.
- 이 클래스는 추상클래스로 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상이다.
- 아래의 그림을 보면 래퍼 클래스들은 모두 Number 클래스의 자손이다.
- BigInteger는 long으로도 다룰 수 없는 큰 범위의 정수를 다루기 위해 사용된다.
- BigDecimal은 double로도 다룰 수 없는 큰 범위의 부동 소수점을 처리하기 위해 사용된다.
1-3. 문자열을 숫자로 변환하기.
(1) 문자열 -> 기본형
(2) 문자열 -> 래퍼 클래스
- 사실, JDK 1.5부터 '오토박싱'에 의해서 (1)과 (2)의 차이가 없어졌다. 그러나 ,성능면에서는 valueOf()가 조금 더 느리다.
( 오토박싱에 대한 설명은 아래의 설명글을 보고 이해하자. )
- 또한 (1)과 (2)는 진법(radix)를 사용할 수 있다.
( 사용 방법은 간단하다. 아래의 코드를 보자. )
( 그러나, 변수 i4를 실행 시, NumberFormatException 오류가 나오게 된다. )
1-4. 오토박싱 & 언박싱
- JDK 1.5 이전에는 기본형과 참조형 간의 연산이 불가능했기 때문에, 래퍼 클래스로 기본형을 객체로
만들어서 계산해야 했다.
- 아래의 코드처럼 원래는 JDK 1.5 이전에는 불가능 했던 것이 지금은 자동으로 넣어주기 때문에 가능하다.
컴파일 전의 코드 | 컴파일 후의 코드 |
![]() |
![]() |
- 이 외에도 내부적으로 객체 배열을 가지는 Vector 클래스와 ArrayList 클래스에 기본형 값을 저장해야
할 때나 형변환이 필요할 때도 컴파일러가 자동적으로 추가해준다.
- 오토박싱과 언박싱은 아래의 코드와 같다.
( 오토박싱: 기본형 값 -> 래퍼 클래스의 객체 )
( 언박싱: 래퍼 클래스의 객체 -> 기본형 값 )