여러가지 기본적인 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 클래스 (0) | 2020.07.26 |
---|---|
[3주차] 기본미션 + 선택미션 [혼공단] [혼공자] (0) | 2020.07.26 |
[JAVA] java.lang 패키지의 String 클래스 (0) | 2020.07.23 |
[JAVA] java.lang 패키지의 Class클래스 (0) | 2020.07.23 |
[JAVA] java.lang 패키지의 System클래스 (0) | 2020.07.23 |