Wrapper(포장) 클래스
- 기본 타입 값을 포장하는 객체
- 기본 타입의 값은 외부에서 변경할 수 없다. (내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다)
- char 타입과 int 타입이 각각 Charctor와 Integer로 변경되고, 기본 타입의 첫 문자를 대문자로 바꾼 이름을 가지고 있다.
박싱(Boxing)과 언박싱(Unboxing)
- 박싱(Boxing) : 기본 타입의 값을 포장 객체로 만드는 과정
- 언박싱(Unboxing) : 포장 객체에서 기본 타입의 값을 얻어 내는 과정
- 박싱 코드
// 생성자를 이용
// valueOf() 메소드 사용
- 언박싱 코드
// 각 포장 클래스마다 가지고 있는 "기본타입명 + Value()" 메소드를 호출하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package sec12.exam01_wrapper;
public class BoxingUnBoxingExample {
public static void main(String[] args) {
//Boxing
Integer obj1 = new Integer(100);
Integer obj2 = new Integer("200");
Integer obj3 = Integer.valueOf("300");
//Unboxing
int value1 = obj1.intValue();
int value2 = obj2.intValue();
int value3 = obj3.intValue();
System.out.println(value1);
System.out.println(value2);
System.out.println(value3);
}
}
|
cs |
* 자동 박싱과 언박싱- 자동 박싱은 포장 클래스 타입에 기본값 대입될 경우에 발생
- 자동 언방식은 기본 타입에 포장 객체가 대입될 경우에 발생
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package sec12.exam01_wrapper;
public class AutoBoxingUnBoxingExample {
public static void main(String[] args) {
//자동 Boxing
Integer obj = 100;
System.out.println("value: " + obj.intValue());
//대입시 자동 Unboxing
int value = obj;
System.out.println("value: " + value);
//연산시 자동 Unboxing
int result = obj + 100;
System.out.println("result: " + result);
}
}
|
cs |
문자열을 기본 타입 값으로 변환
// 포장 클래스의 주요 용도는 기본 타입의 값을 박싱해서 포장 객체로 만드는 것이지만,
문자열을 기본 타입 값으로 변환할 때에도 많이 사용된다.
// 대부분의 포장 클래스에는 "parse+기본타입"명으로 되어 있는 정적(static) 메소드가 있다.
이 메소드는 문자열을 매개값으로 받아 기본 타입 값으로 변환한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package sec12.exam01_wrapper;
public class StringToPrimitiveValueExample {
public static void main(String[] args) {
int value1 = Integer.parseInt("10");
double value2 = Double.parseDouble("3.14");
boolean value3 = Boolean.parseBoolean("true");
System.out.println("value1: " + value1);
System.out.println("value2: " + value2);
System.out.println("value3: " + value3);
}
}
|
cs |
포장 값 비교
// 포장 객체는 내부의 값을 비교하기 위해 포장 객체로 ==와 =! 연산자를 사용할 수 없다.
(이 연산자는 내부의 값을 비교하는 것이 아니라, 포장 객체의 참조를 비교하기 때문이다.)
// 예외 : 다음 값이라면 포장 객체로 ==과 =! 연산자를 이용해서 내부의 값을 비교할 수 있다.
// 내부의 값만 비교하려면 언박싱한 값을 얻어 비교해야 한다
// 포장 객체에 정확히 어떤 값이 저장될지 모르는 상황이라면 ==와 != 연산자는 사용하지 않는 것이 좋다.
// 직접 내부 값을 1. 언박싱해서 비교하거나, 2. equals() 메소드로 내부 값을 비교하는 것이 좋다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package sec12.exam01_wrapper;
public class ValueCompareExample {
public static void main(String[] args) {
System.out.println("[-128~127 초과값일 경우]");
Integer obj1 = 300;
Integer obj2 = 300;
System.out.println("==결과: " + (obj1 == obj2)); // (범위 밖이면) 번지가 다르므로 false
System.out.println("1. 언박싱후 ==결과: " + (obj1.intValue() == obj2.intValue()));
System.out.println("2. equals() 결과: " + obj1.equals(obj2));
System.out.println();
System.out.println("[-128~127 범위값일 경우]");
Integer obj3 = 10;
Integer obj4 = 10;
System.out.println("==결과: " + (obj3 == obj4)); // (범위 안이면) 같은 객체를 참조하므로 내부 비교가 되서 true
System.out.println("1. 언박싱후 ==결과: " + (obj3.intValue() == obj4.intValue()));
System.out.println("2. equals() 결과: " + obj3.equals(obj4));
}
}
|
c |
'Programming > [JAVA]' 카테고리의 다른 글
[JAVA] instance of에 대하여 (0) | 2018.03.23 |
---|---|
[JAVA, 자바]Stack, Queue Memory & DynamicBinding영역 (스택, 큐 메모리 & 동적바인딩) (0) | 2018.03.21 |
[JAVA, 자바] 성적 처리 프로그램(toString 이용) (0) | 2018.03.21 |
[JAVA, 자바] 성적 처리 프로그램 (0) | 2018.03.21 |
[JAVA] 자바의 정의와 설치 및 환경변수 (0) | 2018.03.20 |