자바는 기본 타입의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 래퍼 클래스라고 한다.
값을 포장하고 있다고 해서 붙여진 이름이다.
래퍼 클래스를 생성하기 위한 클래스는 java.lang 패키지에 포함되어 있는데, char 타입과 int 타입이 각각 Character, Integer인 것만
제외하고는 기본 타입의 첫 문자를 대문자로 바꾼 이름을 가지고 있다.
기본 타입 | 래퍼 클래스 |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
포장 객체는 포장하고 있는 기본 타입의 값을 변경할 수 없고, 단지 객체로 생성하는데 목적이 있다.
이러한 객체가 필요한 이유는 컬렉션 객체 때문이다. 컬렉션 객체는 기본타입의 값은 저장할 수 없고, 객체만 저장할 수 있다.
박싱과 언박싱
기본 타입의 값을 포장 객체로 만드는 과정을 boxing이라 한다.
반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 unboxing이라 한다.
package ch12.sec06;
public class BoxingUnBoxingEx {
public static void main(String[] args) {
//Boxing
Integer obj = 100;
System.out.println("value : " + obj.intValue()); // Integer 객체 내부 int값 리턴
//UnBoxing
int value = obj;
System.out.println("value : " + value);
//연산 시 unboxing
int result = obj + 100;
System.out.println("result : " + result);
}
}
문자열을 기본 타입 값을 변환
래퍼 클래스는 문자열을 기본 타입 값으로 변환할 때도 사용된다. 대부분 래퍼 클래스에는 parse + 기본타입 명으로 되어있는 static method가 있다. 이 메소드는 문자열을 해당 기본 타입값으로 변환한다.
포장 값 비교
래퍼 클래스 내부 값을 비교하기 위해 == 와 != 연산자를 사용할 수 없다. 이 연산은 내부의 값을 비교하는 것이 아니라 포장 객체의 참조값을 비교하기 때문이다.
Integer obj1 = 100;
Integer obj2 = 100;
System.out.println(obj1 == opj2);
// 실행결과 : false
내부 값을 비교하는 것이 아니라 객체의 참조 주소를 비교한다는 것을 알아두자.
따라서 포장객체에 정확히 어떤 값이 저장될 지 모르는 상황에선 ==, != 연산자를 사용하지 않는것이 좋다.
대신 equals()메소드를 사용해 내부 값을 비교할 수 있다.
package ch12.sec06;
public class ValueCompareEx {
public static void main(String[] args) {
// -128~127 초과값일 경우
Integer obj1 = 300;
Integer obj2 = 300;
System.out.println("==: " + (obj1 == obj2));
System.out.println("equals(): " + obj1.equals(obj2));
System.out.println();
// -128~127의 경우
Integer obj3 = 10;
Integer obj4 = 10;
System.out.println("==: " + (obj3 == obj4));
System.out.println("equals(): " + obj3.equals(obj4));
}
}
예외의 경우가 있다. 래퍼클래스를 효율적 사용하기 위해 다음 범위의 값을 갖는 래퍼 클래스는 공유된다.
아래 표의 범위 내에 있는 래퍼 클래스는 ==와 != 연산자로 비교할 수 있다.
하지만 내부의 값을 비교하는 것이 아닌 참조 주소를 비교하는것을 알아야한다.
타입 | 범위 |
boolean | true, false |
char | \u0000 ~ \u007f |
byte, short, int | -128 ~ 127 |
'Java' 카테고리의 다른 글
어노테이션 (0) | 2024.07.10 |
---|---|
정규표현식 (0) | 2024.07.10 |
롬복 (Lombok) (0) | 2024.07.09 |
레코드 선언 (0) | 2024.07.09 |
객체 문자정보 - toString() (0) | 2024.07.09 |