
여러가지 기본적인 java.lang 패키지의 클래스를 공부해보자.
ㅇWrapper 클래스 <<요거를 보자
java.lang패키지의 Wrapper 클래스를 공부해보자.
자바에서 기본타입 객체들을 포장 객체라고 한다. (Wrapper)
ㄴ기본타입 값을 내부에 두고 포장하기 때문!!
ㄴ기본타입 값은 외부에서 변경할 수 없다. 그 내부값을 변경하고 싶다면 '새로운 포장 객체'를 만들어야 한다.
ㄴ사용 : 컬렉션 프레임워크에서 기본 타입 값을 객체로 생성해 관리할 때! (13장에서 배운다고 한다 야호>_<)
포장 클래스는 다음과 같이 기본 타입에 대응된다.
| 기본 타입 | 포장 클래스 |
| byte | Byte |
| char | Character |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
ㅇ박싱과 언박싱 (Boxing, Unboxing)
ㄴ기본타입 값을 포장객체로 만드는 과정 ㅣ Boxing
ㄴ포장객체에서 기본타입값을 얻어내기 ㅣ Unboxing
기본타입(8개)의 값을 박싱하는 방법을 보자.
(간단하다. 포장클래스의 생성자 매개값으로 기본타입값or문자열 넘겨주면 된다.)
| 매개값에 기본타입값을 줄 경우 | 매개값에 문자열을 줄 경우 |
| Byte obj = new Byte(10); | Byte obj = new Byte("10"); |
| Character obj = new Character('가'); | 없음 |
| Short obj = new Short(100); | Short obj = new Short("100"); |
| Integer obj = new Integer(1000); | Integer obj = new Integer("1000"); |
| Long obj = new Long(10000); | Long obj = new Long("10000"); |
| Float obj = new Float(2.5F); | Float obj = new Float("2.5F"); |
| Double obj = new Double(3.5); | Double obj = new Double("3.5"); |
| Boolean obj = new Boolean(true); | Boolean obj = new Boolean("true"); |
이렇게 포장클래스 생성자를 통해 박싱하는구나아
박싱을 했다. 변수 obj가 포장 객체를 참조하고 있다!!
근데 생성자 이용하지 않아도... 각 포장클래스가 갖고 있는 메소드를 통해 박싱할 수 있다.
각 포장클래스마다 가지고 있는 정적 메소드인 valueOf()를 사용하면 된다.
Integer obj = Integer.valueOf(1000);
Integer obj = Integer.valueOf("1000");
이로케!!
ㅡㅡㅡㅡ
이제 박싱된 포장 객체에서 다시 기본타입값을 얻어내보자. (언박싱)
짱짱 쉽다
각 포장클래스마다 가지고 있는 '기본타입이름+Value()' 메소드를 호출하면 된다.
| 언박싱 : 기본타입값 이름을 이용한다. | |
| byte | num = obj.byteValue(); |
| char | ch = obj.charValue(); |
| short | num = obj.shortValue(); |
| int | num = obj.intValue(); |
| long | num = obj.longValue(); |
| float | num = obj.floatValue(); |
| double | num = obj.doulbeValue(); |
| boolean | bool = obj.booleanValue(); |
<<기본타입값을 박싱하기, 언박싱하기>>


ㅇ자동 박싱, 언박싱
ㄴ직접 박싱, 언박싱 안해도 '자동으로 박싱, 언박싱 일어나는 경우가 있다.
ㅡ자동 박싱: 포장클래스타입에 기본값이 대입될 경우.
ㄴInteger obj = 100; //자동 박싱
ㅡ자동 언박싱: 기본 타입에 포장 객체가 대입되는 경우 / 연산하는 경우
ㄴInteger객체로부터 int값이 자동 언박싱 하는 예를 보자.
Integer obj = new Integer(200);
int value1 = obj; //자동 언박싱
int value2 = obj + 100; //자동 언박싱

문자열을 기본타입 값으로 변환
ㄴ이런 상황에도 포장클래스가 사용된다.
ㄴ앞서 계속 사용했던 parse어쩌구가 포장클래스와 연관이 있었던 것이다.

포장 값 비교
<<포장 객체 내부 값 비교할 때는 ==와 !=연산자를 사용하지 않는 것이 좋다>>
ㄴ내부 값 비교하는 게 아니라 '참조를 비교하는 연산자'이기 때문이다.
ㄴ그래서 : 언박싱해서 값을 비교해야 하는 경우가 많다.
아래 '타입 && 범위'에서는 ==, !=연산자로 값을 비교할 수 있지만..
| 타입 | 값 범위 |
| boolean | true, false |
| char | \u0000 ~ \u007f |
| byte, short, int | -128 ~ 127 (앗 byte범위만 되네) |
포장객체에 어떤 범위의 어떤 값이 저장될지 잘 모르면 저 연산자를 안 쓰는 것이 좋다.
다음과 같은 방법이 있다.
ㅇ내부값을 언박싱해 비교하기
ㅇequals()메소드로 값 비교하기
ㄴWrapper클래스의 equals()메소드는 내부값을 비교하도록 재정의되어있다.
<<포장 객체 비교하기>>

앞서 배운것들이 Wrapper 클래스랑 연관이 있었던 거구나
'JAVA' 카테고리의 다른 글
| [JAVA] java.lang 패키지의 Math 클래스 (1) | 2020.07.26 |
|---|---|
| [3주차] 기본미션 + 선택미션 [혼공단] [혼공자] (0) | 2020.07.26 |
| [JAVA] java.lang 패키지의 String 클래스 (0) | 2020.07.23 |
| [JAVA] java.lang 패키지의 Class클래스 (1) | 2020.07.23 |
| [JAVA] java.lang 패키지의 System클래스 (0) | 2020.07.23 |
