래퍼 클래스 ( Wrapper Class )
기본타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼클래스 ( Wrapper Class ) 라고 합니다.
래퍼클래스는 인스턴스에 저장된 값을 변경할 수 없으며, 값을 참조하기 위해 새로운인스턴스를 생성하고 생성된 인스턴스의 값을 참조만 할 수 있습니다.
래퍼 클래스는 java.lang 패키지에 포함되어 제공됩니다.
java.lang 패키지는 자바 프로그래밍에 필요한 가장 기본 클래스를 모아놓은 패키지 이므로 Wrapper 를 사용하기 위해 추가로 해야하는 작업은 없습니다.
기본타입 & 래퍼 클래스 (객체)
기본 타입 | 래퍼 클래스 (객체) |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
래퍼클래스를 사용하는 이유
ArrayList 처럼 컬렉션클래스를 사용하는 경우에는 객체형을 사용해야 합니다.
이 때 메소드 파라미터가 ArrayList 인 경우 객체형태를 받아야 하기 때문에 Wrapper 형태로 변환하여 넘겨주어야 합니다.
아래 코드를 보면 ArrayList 는 객체형을 사용해야하기 때문에 int 타입을 사용하는 경우 오류가 발생합니다.
그래서 다른 메소드에서 ArrayList 를 매개변수로 받으려면 Integer 타입을 사용해야 합니다.
박싱과 언박싱
기본 타입의 데이터를 래퍼클래스로 변환하는 과정을 박싱이라고 합니다.
래퍼클래스에 저장된 값을 기본 타입의 데이터로 변환하는 과정을 언박싱이라고 합니다.
오토 박싱과 오토 언박싱
명시적으로 지정하지 않더라도 자바 컴파일러가 자동으로 박싱/언박싱을 진행할 수 있습니다.
이러한 방식을 앞에 '오토' 를 붙여 오토 박싱, 오토 언박싱 이라고 합니다.
박싱/언박싱, 오토박싱/언박싱 예제 코드
9, 10 라인을 보면 명시적으로 Integer 객체와 intValue 라는 함수를 사용하여 값을 참조/반환하고 있습니다.
14, 15 라인에서는 객체 타입을 따로 작성하지 않더라도 컴파일러에 의해 자동으로 오토박싱/언박싱이 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import java.util.ArrayList;
public class Wrapper {
public static void main(String[] args) {
int n = 3;
Integer num = new Integer(n); // 박싱
int m = num.intValue(); // 언박싱
char c = 'A';
Character ch = c; // 오토박싱
char d = ch; // 오토언박싱
}
}
|
cs |
참고로 자바 1.9 버전 부터는 Wrapper Class 가 사라지게 될 기능이라고 가이드하고 있습니다.
사용을 못하는 것은 아니므로 참고만 해주세요.
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] 자바 재귀호출과 팩토리얼 함수 (0) | 2021.05.07 |
---|---|
[JAVA] 자바 암시적 타입변환과 명시적 타입변환 (0) | 2021.05.07 |
[JAVA] 자바와 PostgreSQL JDBC 연동방법 (2) | 2021.04.26 |
[JAVA] 자바와 SQL Server JDBC 연동방법 (0) | 2021.04.13 |
[JAVA] 자바 인터페이스와 추상클래스 차이 (0) | 2021.04.01 |