포장 클래스
자바는 기본 타입의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 포장(Wrapper) 객체라고 한다. 값을 포장하고 있다고 해서 붙여진 이름이다.
| 기본 타입 | 포장 클래스 |
| byte | Byte |
| char | Character |
| short | Short |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| int | Integer |
포장 객체는 포장하고 있는 기본 타입의 값을 변경할 수 없고, 단지 객체로 생성하는 데 목적이 있다. 이런 객체가 필요한 이유는 컬렉션 객체 때문이다. 컬렉션 객체는 기본 타입의 값은 저장할 수 없고, 객체만 저장할 수 있다.
박싱과 언박싱
기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)이라고 하고, 반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱(Unboxing)이라고 한다.
박싱은 포장 클래스 변수에 기본 타입 값이 대입될 때 발생한다. 반대로 언박싱은 기본 타입 변수에 포장 객체가 대입될 때 발생한다.
Integer obj = 100; // 박싱
int value = obj; // 언박싱
언박싱은 다음과 같이 연산 과정에서도 발생한다. obj는 50과 연산되기 전에 언박싱된다.
int value = obj + 50; // 언박싱 후 연산
예제 코드
package ch12;
public class BoxingUnBoxingExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Boxing
Integer obj = 100;
System.out.println("value: " + obj.intValue()); //intValue() 메서드는 Integer 객체 내부의 int 값을 리턴한다.
//Unboxing
int value = obj;
System.out.println("value: " + value);
//연산 시 Unboxing
int result = obj + 100;
System.out.println("result: " + result);
}
}
출력 결과
value: 100
value: 100
result: 200
문자열을 기본 타입 값으로 변환
포장 클래스는 문자열을 기본 타입 값으로 변환할 때도 사용된다. 대부분 포장 클래스에는 'parse + 기본타입'명으로 되어있는 정적 메서드가 있다. 이 메서드는 문자열을 해당 기본 타입 값으로 변환한다.
포장 값 비교
포장 객체는 내부 값을 비교하기 위해 ==와 != 연산자를 사용할 수 없다. 이 연산은 내부의 값을 비교하는 것이 아니라 포장 객체의 번지를 비교하기 때문이다.
예외도 있다. 포장 객체의 효율적 사용을 위해 다음 범위의 값을 갖는 포장 객체는 공유된다. 이 범위의 값을 갖는 포장 객체는 ==와 != 연산자로 비교할 수 있지만, 내부 값을 비교하는 것이 아니라 객체 번지를 비교한다는 것을 알아야 한다.
| 타입 | 값의 범위 |
| boolean | true, false |
| char | \u0000 ~ \u007f |
| byte, short, int | -128 ~ 127 |
포장 객체에 정확히 어떤 값이 저장될 지 모르는 상황이라면 ==와 !=는 사용하지 않는 것이 좋다. 대신 equals() 메서드를 이용해 내부 값을 비교할 수 있다. 포장 클래스의 equals() 메서드는 내부의 값을 비교하도록 재정의되어 있다.
예제 코드
package ch12;
public class ValueCompareExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
//-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));
}
}
출력 결과
==: false
equals(): true
==: true
equals(): true
'Language > JAVA' 카테고리의 다른 글
| [JAVA] 날짜와 시간 클래스 (0) | 2024.10.16 |
|---|---|
| [JAVA] 수학 클래스 (2) | 2024.10.16 |
| [JAVA] 문자열 클래스 (1) | 2024.10.15 |
| [JAVA] System 클래스 (0) | 2024.10.15 |
| [JAVA] 롬복 사용하기 (1) | 2024.10.15 |