BACKEND/JAVA

자바 클래스 - Wrapper 클래스

우진하다 2023. 6. 3. 16:18

시작하며.

자바 Wrapper 클래스에 대한 이해도를 높여봅시다.

 

기본 자료형을 위한 클래스.

자바에서 정수를 사용할 때 int 라는 기본형을 사용한다.
하지만 정수를 객체형으로 사용해야 하는 경우가 있다.
매개변수가 객체거나, 반환 값이 객체거나, 항변환을 위해서 등등

이를 위해 자바에서는 기본 자료형처럼 사용할 수 있는 클래스를 제공한다.
이러한 클래스를 기본 자료형을 감쌌다는 의미로 Wrapper 클래스라고 한다.

기본형 Wrapeer 클래스
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float / double Float / Double

 

 

Integer 클래스.

Integer 클래스는 개체에서 기본 형식 int의 값을 래핑합니다. 
Integer 유형의 개체는 int 유형의 단일 필드를 포함합니다.
또한 이 클래스는 int를 String으로 변환하고 String을 int로 변환하는 여러 가지 방법과 
int를 처리할 때 유용한 다른 상수 및 메서드를 제공합니다.
이 클래스는 값 기반 클래스입니다. 
프로그래머는 인스턴스를 호환 가능한 인스턴스로 취급해야 하며 동기화를 위해 인스턴스를 사용하면 안 됩니다. 
그렇지 않으면 예측할 수 없는 동작이 발생할 수 있습니다.


Integer 클래스의 생정자를 보면 다음과 같이 특정 정수를 매개변수로 받는 경우와 문자열을 받는 경우 두 가지가 있고
int 자료형의 특성이 그대로 구현되어 있다.
대부분 Wrapper클래스는 그 Wrapper클래스의 기본형 타입의 정의와 다르지 않다.

private final int value;

// 특정 정수를 매개변수로 받는 경우
	public Integer(int value) {
        this.value = value;
    }
    
// 특정 문자열을 매개변수로 받는 경우
    public Integer(String s) throws NumberFormatException {
        this.value = parseInt(s, 10);
    }
    /**
     * A constant holding the minimum value an {@code int} can
     * have, -2<sup>31</sup>.
     */
    @Native public static final int   MIN_VALUE = 0x80000000;

    /**
     * A constant holding the maximum value an {@code int} can
     * have, 2<sup>31</sup>-1.
     */
    @Native public static final int   MAX_VALUE = 0x7fffffff;

 

Integer 클래스의 주요 메서드.

  • intValue() : int 자료형 값을 가져오기 위한 메서드
Integer value = new Integer(100);
int myValue = value.intValue();
System.out.println(myValue); // 100

 

  • valueOf() : static 메서드로 생성자를 사용하지 않고 정수나 문자열을 Integer 클래스로 반환 받을 수 있음
Integer num1 = Integer.valueOf("100");
Integer num2 = Integer.valueOf(100);
System.out.println(num1 + num2); // 200

 

  • parseInt() : 문자열이 어떤 숫자를 나타낼 때, int 값을 반환
int num = Integer.parseInt("100");
System.out.println(num); // 100

 

오토박싱과 언박싱.

과거 자바 5 이전에는 Wrapper 클래스와 기본 타입의 연산을 위해 하나의 형태로 일치해야했지만
가령 Integer 클래스면 intValue() 사용해서 값 일치하고 사용 등
이제는 컴파일러에서 변경해주어 변환 없이 사용 가능.

Integer number = new Integer(50);
int intNumber = 200;
int sum = number + intNumber; // number.intValue()로 변환 : 언박싱 
System.out.println(sum); // 250

Integer integerNumber = intNumber; // Integer.valueOf(intNumber) : 오토박싱
System.out.println(integerNumber); // 200