래퍼 클래스(wrapper class)
- wrap : 감싸다, 포장하다
- 기본 자료형을 클래스 타입으로 포장해 놓은 클래스
- 기본 자료형보다 객체로 저장하기 때문에 좀 더 다양한 기능을 제공하기 위해 사용함
- 기본 타입의 값을 내부에 두고 포장을 하기 때문에 포장(wrapper) 클래스라고도 함
- 기본 자료형 : byte, short, long, float, double, boolean, char, int (8가지)
- wrapper 클래스 : Byte, Short, Long, Float, Double, Boolean, Character, Integer
(전부 앞이 대문자!)
래퍼 클래스(wrapper class) 사용 이유
1. 매개변수로 객체가 요구될 때
2. 기본형 값이 아닌 객체로 저장해야 할 때
3. 객체간 비교가 필요할 때
4. 형 변환이 자유롭다는 특징이 있음 (★★★★★★★★★★★★★)
package wrapper;
public class Ex01 {
public static void main(String[] args) {
// 기본 자료형들은 단순한 연산을 하기 위한 용도로 사용
int su1 = 100, su2 = 34;
System.out.println("더하기 : " + (su1 + su2));
System.out.println();
// 클래스 자료형으로 바꾸기
// 박싱(boxing) : 기본자료형 -> 클래스형
// 언박싱(unboxing) : 클래스형 -> 기본자료형
Integer in1 = new Integer(su1); // 박싱
Integer in2 = new Integer(su2); // 박싱
// 형변환이 자유로움
System.out.println("float형으로 변경 : " + in1.floatValue()); // 언박싱
System.out.println();
// 숫자 -> 문자열
// toString() 메소드 : 숫자 -> 문자열로 변경
// String.valueOf(숫자) : 숫자 -> 문자열
System.out.println("숫자 -> 문자열 >>> " + (in2.toString() + 34));
System.out.println("숫자 -> 문자열 >>> " + (String.valueOf(su2) + 34));
System.out.println();
// 문자열 -> 숫자
// perseInt() : 문자열 -> 숫자
System.out.println
("문자열 -> 숫자 : " + (Integer.parseInt(String.valueOf(su2)) + 44));
}
}
결과
더하기 : 134
float형으로 변경 : 100.0
숫자 -> 문자열 >>> 3434
숫자 -> 문자열 >>> 3434
문자열 -> 숫자 : 78
오토 박싱(autoboxing)과 언박싱(unboxing)
- Integer는 객체이고, int는 4바이트 기본 자료형임
- 두개의 자료를 같이 연산할 때 자동으로 변환이 일어남
public class wrapper {
public static void main(String[] args) {
// 오토 박싱과 언박싱 예제
//Integer num1 = new Integer(100);
Integer num1 = 100; // 버전9 이후부터는 이렇게 써도 된다.
int num2 = 200;
int sum = num1 + num2; // num1가 언박싱=> num1.intValue()로 변환
Integer num3 = num2; // num2 오토박싱 => num2.valueOf(num2)로 변환
System.out.println(sum); // 300
System.out.println(num3); // 200
}
}
결과
300
200
'Back-End > Java' 카테고리의 다른 글
[Java] 제네릭(Generic) (지네릭스) (0) | 2021.09.17 |
---|---|
[JAVA] 싱글톤(singleton) 방식으로 객체 생성하기 (0) | 2021.09.17 |
[JAVA] 다양한 형태의 클래스 선언 방법과 중첩클래스(inner class) (0) | 2021.09.17 |
[Java] Object 클래스 (0) | 2021.09.16 |
[Java] 스코프와 this (0) | 2021.08.27 |
댓글