래퍼 클래스, Number 클래스
래퍼(wrapper) 클래스
- 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스.
래퍼 클래스는, 기본형 값을 감싸는 클래스를 말한다.
Integer 래퍼 클래스는, 기본형 int를 감싸고 있다.
즉, 자바에 있는 8개 기본형은 객체가 아닌데, 이 기본형을 객체로 다뤄야 할 때 사용하는 클래스가 래퍼 클래스이다.
래퍼클래스는 8개가 있다.
기본형과 1대1로 매칭된다.
Integer와 Character만 빼면, 기본형의 앞에 첫글자만 대문자로 바꾸면 래퍼클래스가 된다.
생성자는 매개변수로 기본형값을 받던지, 문자열값을 받던지 할 수 있다.
원래는 자바가 객체지향 언어이다보니, 객체지향 언어에서는 모든것을 객체로 다루기 때문에,
원래는 기본형은 객체가 아니기 때문에 존재하면 안된다.
그런데 자바에는 왜 기본형이 있을까?
모든것을 객체로 하지 않고 기본형이라는 예외를 둔 이유는, 성능때문이다.
만약에 기본형 int i = 10이 있으면
변수 i에 10을 저장하면 되는데,
기본형이 없으면 10을 저장하기 위해서 Integer타입의 i2참조변수를 만들고, 10을 저장한 Integer객체를 i2참조변수에 주소를 저장해야 한다.
기본형은 직접접근이 가능하지만, 참조형은 참조변수에 저장된 주소로 찾아가서 값을 읽어야 한다.
그래서 아무래도 기본형보다는 성능이 떨어질 수 잆다.
그래서 이러한 성능문제 떄문에 기본형을 넣게 되었다.
예제를 보자.
100이라는 값을 갖는 래퍼클래스 2개를 만들었다.
그리고 등가비교를 하면 False가 된다. 왜냐하면 서로 다른 객체이기 때문이다.
equals()를 사용해서 비교하면, 내용비교를 하기 떄문에 true가 반환된다.
compareTo()를 하면 같은 경우에는 0, 오른쪽 값이 작으면 양수, 오른쪽 값이 크면 음수를 반환한다.
toString()은 객체에 저장되어있는 100을 문자열로 반환한다.
Integer.MAX_VALUE는 integer의 최대값, +20억
Integer.MIN_VALUE는 integer의 최소값, -20억
Integer.SIZE는 사이즈가 몇비트인지반환한다.32비트
Integer.BYTES는 몇바이트인지 반환한다. 4바이트.
Integer.TYPE은 타입을 반환한다. int
예제는 Integer로 구성되어 있지만, 다른 나머지 래퍼클래스들도 비슷한 정보를 가지고 있다.
Number 클래스
- 모든 숫자 래퍼 클래스의 조상.
상속계층도를 보면, Number클래스는, 모든 숫자 래퍼 클래스의 조상이다.
BigInteger는 아주큰 정수이고,
BigDecimal은 아주큰 실수이다.
Double의 최대값은 10^308정도이고 정밀도는 15자리인데,
이 값보다 크거나, 더 높은 정밀도가 필요하면 BigDecimal을 사용하면 된다.
그리고, Long의 최대값은 10^19정도 인데, 이값보다 큰 경우에는 BigInteger를 사용하면 된다.
Number클래스 내부를 살펴보면,
우선 추상 클래스다.
그리고 래퍼 클래스의 객체가 가지고 있는 값을 기본형으로 변환해주는 추상메서드를 가지고 있다.
만약에 래퍼클래스 Integer의 객체 new Integer(100)이 있을 때,
이것을 int 100바꾸려면 어떻게 해야할까?
intValue()라는 메서드를 사용하면 된다.
'JAVA' 카테고리의 다른 글
날짜와 시간, Calendar 클래스 (0) | 2022.04.20 |
---|---|
오토박싱 & 언박싱, 문자열과 숫자변환 (0) | 2022.04.19 |
StringBuilder, Math 클래스 (0) | 2022.04.17 |
StringBuffer 클래스의 메서드 (0) | 2022.04.16 |
StringBuffer 클래스 (0) | 2022.04.15 |
댓글
이 글 공유하기
다른 글
-
날짜와 시간, Calendar 클래스
날짜와 시간, Calendar 클래스
2022.04.20 -
오토박싱 & 언박싱, 문자열과 숫자변환
오토박싱 & 언박싱, 문자열과 숫자변환
2022.04.19 -
StringBuilder, Math 클래스
StringBuilder, Math 클래스
2022.04.17 -
StringBuffer 클래스의 메서드
StringBuffer 클래스의 메서드
2022.04.16