JAVA/JAVA기본
JAVA - Wrapper Class란?
realizers
2021. 12. 10. 22:06
728x90
반응형
Wrapper Class란?
- 자바 API 클래스 중 하나입니다.
- 자바의 자료형은 primitive type(기본 타입)과 reference type(참조 타입)으로 나누어집니다.
- Primitive type - byte, short, char, int, float, double, boolean
- Reference type - class, interface 등등
- 8개의 Primitive type에 해당하는 데이터를 객체로 표현하기 위해 포장해주는 클래스가 바로 Wrapper Class입니다.
언제 사용될까?
- 주로 매개변수로 객체를 요구하고, 기본 데이터형이 아닌 객체로 저장해야 할 때, 객체간 비교가 필요할 때 등등의 경우에 Wrapper 클래스가 이용됩니다.
- 예를 들어 특정 객체를 한 곳에 모아 관리하기 편하게 하기 위해 제공되는 Collections Framework에서는 객체 형태만 다를 수 있기 때문에 기본 데이터를 이용할 때는 데이터 형식에 따른 Wrapper 객체로 생성하여 이용합니다.
- 문자열로 생성된 타입을 기본 데이터형으로 변경할 때도 Wrapper 클래스를 사용합니다.
Wrapper Class 종류
Wrapper Class의 사용 방법
Case 01 - Boolean객체를 new 생성자를 이용하여 생성할 수 있습니다.
- wb1과 wb2는 boolean이라는 형태는 같지만 각각 Heap영역에 생성이 되므로 다른 객체입니다.
boolean b = true;
Boolean wb1 = new Boolean(true);
Boolean wb2 = new Boolean(false);
Case 02 - Integer객체를 new 생성자를 이용하여 생성할 수 있습니다.
- new 키워드를 사용한 Integer와 사용하지 않은 Integer가 있지만 각각 Heap영역에 생성되므로 다른 객체로 인식하게 됩니다.
Integer i1 = new Integer(10);
Integer i2 = 10;
Case 03 - Wapper 객체에 정의된 static 메서드인 parseInt()와 valueOf() 메서드를 이용하여 객체를 생성할 수 있습니다.
- 두 메서드의 차이는 parseInt()는 반환값이 기본 데이터형인 반면, valueOf()는 객체형입니다.
int i1 = Integer.parseInt("100");
int i2 = Integer.valueOf("100");
System.out.println(i1 == i2); // true
Wrapper Class : AutoBoxing & UnBoxing
- 기본 데이터형을 객체화하여 사용하기 위해서는 귀찮은 작업을 몇번이고 반복해야합니다. 그렇기 때문에 자바에서는 오토박싱과 오토언박싱이라는 기능을 컴파일러가 자동으로 해줍니다.
- Boxing - 기본 타입의 데이터를 Wrapper class의 인스턴스로 변환하는 과정
-
Integer number = new Integer(10);
-
- UnBoxing - Wrapper class의 인스턴스에 저장된 값을 기본 타입의 데이터로 꺼내는 과정
-
int n = number.intValue();
-
AutoBoxing & AutoUnBoxing
- AutoBoxing = 자동화된 Boxing
-
Integer number = 10;
-
AutoUnBoxing = 자동화된 UnBoxing
-
int n = number;
-
예제
// Boxing & UnBoxing
Integer number = new Integer(10); // Boxing
int n = number.intValue(); // UnBoxing
// AutoBoxing & AutoUnBoxing
Integer number = 10; // AutoBoxing
int n = number; // AutoUnBoxing
Wrapper Class 의 비교연산 (==, equals)
- Wrapper class는 생성시 각각 Heap영역에 생성되므로 동일한 Wapper class끼리는 동등 연산자로는 판단을 할 수 업습니다.
- equals() 메서드를 사용하면 같은 형태? 이므로 판단은 할 수 있습니다.
Integer number1 = new Integer(10);
Integer number2 = new Integer(10);
int number3 = 10;
System.out.println("래퍼클래스 == 기본타입 : " + (number1 == number3)); // true
System.out.println("래퍼클래스.equals(기본타입) : " + (number1.equals(number3))); // true
System.out.println("래퍼클래스 == 래퍼클래스 : " + (number1 == number2)); // false
System.out.println("래퍼클래스.equals(래퍼클래스) : " + (number1.equals(number2))); // true
728x90
반응형