티스토리 뷰

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
반응형