Wrapper 클래스란 무엇이며, 어떻게 사용할까?
Wrapper 클래스
--
기본 타입을 객체로 감싸기 위한 클래스를 통틀어서 부르는 용어다.
객체지향에서는 모든 것이 객체로 다루어져야 하지만 기본 타입은 예외다.
하지만 기본 타입을 객체로 다뤄야 하는 경우가 생기기 때문에 Wrapper 클래스를 사용한다.
예시
- 매개변수가 객체로 값을 요구할 때
- 기본 타입이 아닌 객체로 값을 저장해야 할 때
- 객체 간의 비교가 필요할 때
Java는 8개의 기본형이 존재하여 완전한 객체지향 언어라고 부를 수 없다.
Wrapper 클래스 종류
- 래퍼 클래스는 모두 equals() 메서드가 오버라이딩 되어 있어 주소값이 아닌 객체가 가지고 있는 값을 비교한다.
- toString() 메서드도 오버라이딩 되어 있어 객체가 가지고 있는 값을 문자열로 변환하여 반환할 수 있다.
- MAX_VALUE, MIN_VALUE, SIZE, BYTES, TYPE 등의 static 상수도 공통적으로 가지고 있다.
--
Wrapper 클래스 구조
--
래퍼 클래스 중에서
숫자를 멤버변수로 갖지 않는 래퍼 클래스는 Object 클래스를 상속받고
숫자를 멤버변수로 갖는 래퍼 클래스는 Number 클래스를 상속받는다.
추가로 BigInteger와 BigDecimal 클래스가 있다.
- BigInteger는 long보다 큰 정수를 다룰 때 사용
- BigDecimal은 double보다 큰 부동 소수를 다룰 때 사용
--
문자열 -> 기본형 / 문자열 -> 래퍼 클래스
--
문자열 -> 숫자로 변환하는 메서드는 여러 가지 제공한다.
int i = new Integer("100").intValue();
int i2 = new Integer.parseInt("100"); //주로 이 방법을 많이 사용한다.
Integer i3 = Integer.valueOf("100");
번외
문자열 -> 숫자로 변환할 때 문자열이 10진수가 아닌 다른 진법의 형태로도 사용이 가능하다.
// 제공하는 메서드
static int parseInt(String s, int radix) // (문자열, 진수)
static Integer valueOf(String s, int radix)
// 예시 코드
int i = Integer.parseInt("100", 2); // 100(2) -> 4
int i2 = Integer.parseInt("FF", 16); // FF(2) -> 255
--
오토박싱(autoboxing)과 언박싱(unboxing)
--
오토박싱과 언박싱은
JDK 1.5 이후에 도입된 기본형 <--> 래퍼 클래스를 자동으로 변환해 주는 기능이다.
- 오토박싱 : 기본형 -> 래퍼 클래스의 객체로 자동 변환
- 언박싱 : 래퍼 클래스 -> 기본형으로 자동 변환
오토박싱, 언박싱 기능 적용 전, 후 예시 코드
// 기본형
int iii = 10;
Integer iiiObject = Integer.valueOf(iii); // 기본형 -> 래퍼 클래스(객체)
int result = iiiOjbect.intValue(); // 래퍼 클래스(객체) -> 기본형
Integer iiiObject = iii; // [오토박싱] 기본형 -> 래퍼 클래스(객체)
int result = iiiOjbect; // [언박싱] 래퍼 클래스(객체) -> 기본형
오토박싱이나 언박싱을 이용하면
valueOf() 메서드나 intValue() 메서드들을 실행할 때 컴파일러가 자동으로 삽입하여 실행해 준다.
오토박싱과 언박싱 기능을 통해 기본형과 참조형 간의 계산이 가능해졌다.
(java의 규칙이 바뀐 것은 아니고, 컴파일러가 자동으로 변환하는 코드를 삽입해 준다.)
예시 코드
// 컴파일 전
int i = 10;
Integer iObj = new Integer(5);
int sum = i + iobj; // 기본형(i) + 객체(iobj)
// 컴파일 후
int i = 10;
Integer iObj = new Integer(5);
int sum = i + iobj.intValue(); // 실행할 때 컴파일러가 intValue() 메서드를 삽입하여 실행
--
'Language > Java' 카테고리의 다른 글
컬렉션 프레임워크 ( List, Set, Map ) (0) | 2024.12.11 |
---|---|
[java.lang] Math 클래스 (수학적 계산 관련 클래스) (0) | 2024.11.05 |
[java.lang] StringBuffer 클래스, StringBuilder 클래스 (가변 문자열 관련 클래스) (0) | 2024.11.03 |
[java.lang] String 클래스 (불변 문자열 관련 클래스) (0) | 2024.10.31 |
[java.lang] Object 클래스 (객체 관련 클래스) (0) | 2024.10.31 |