[Java] 래퍼 클래스

소이뎁·2023년 10월 18일
1

Java

목록 보기
19/26
post-thumbnail

📍 래퍼 클래스

  • 래퍼 클래스는 기본 데이터 타입(primitive data type)을 객체로 감싸는 클래스이다.
  • primitive data type을 Objects(reference data type)로 변환한다.
  • 래퍼 클래스는 heap까지 메모리를 차지하기 때문에 되도록 래퍼 클래스보다 기본 데이터 타입을 사용하는 것이 더 좋다.

📍 래퍼 클래스를 사용하는 경우

  • 전달 인자를 수정 가능하게 하고 싶은 경우(주소값으로 저장)
  • 객체만 처리하는 java.util package의 Class, Collection framework를 사용하는 경우

📍 래퍼 클래스 종류

  • String은 래퍼 클래스가 아닌 참조 자료형(reference type) 중 하나이다.
Primitive Data TypeWrapper Class
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

📍 오토박싱 & 언박싱

  • autoboxing: Primitive data type을 Wrapper Class로 자동 변환하는 것
  • unboxing: Wrapper Class을 Primitive data type로 자동 변환하는 것
// autoboxing (int -> Integer)
Integer i = 10;

// unboxing (Integer -> int)
int i = new Integer(10);

📍 래퍼 클래스 생성

  • 오토박싱을 사용하는 방법(권장): Heap 영역의 constant pool에 저장, 공유 가능
  • new 연산자를 사용하는 방법: Heap 영역에 저장, 공유 불가
package lesson07;

public class Ex01 {

	public static void main(String[] args) {
    
		// 오토박싱을 사용하는 방법(권장)
		Integer n2 = 5;
        
        // new 연산자를 사용하는 방법
		Integer n3 = new Integer(5);
		
	}

}

📍 값 비교

  • ① Primitive data type과 Wrapper Class를 == 연산자로 비교할 때, 언박싱을 수행한다. 따라서 Primitive data type이 한쪽에라도 있는 경우, ==로 값 비교가 가능하다.
  • ② 두 변 모두 오토박싱을 사용하여 생성된 래퍼 객체일 경우, constant pool의 메모리를 공유하므로 ==로 값 비교가 가능하다.
  • ③ 그 외의 경우, equal로 값 비교가 가능하다.
package lesson07;

public class Ex01 {

	public static void main(String[] args) {
	
		int n1 = 5; // primitive data type
		Integer n2 = 5; // reference data type(constant pool)
		Integer n3 = new Integer(5); // reference data type(constant pool X)
		Integer n4 = 5; // reference data type(constant pool)
		
        // ①
		System.out.println(n1 == n2); // 값 == 언박싱 값, true
		System.out.println(n1 == n3); // 값 == 언박싱 값, true
        
        // ②
		System.out.println(n2 == n4); // 주소값(constant pool) == 주소값(constant pool), true
        
        // ③
		System.out.println(n2 == n3); // 주소값(constant pool) == 주소값, false
		System.out.println(n2.equals(n3)); // 값 == 값, true
        
	}

}

References

🔗 https://www.geeksforgeeks.org/wrapper-classes-java

0개의 댓글