Wrapper 클래스
- 기본 데이터타입을 객체 형태로 관리해주는 클래스
- 기본 데이터타입과 1:1로 대응되는 8개의 클래스가 제공됨,
=> 대부분은 기본데이터타입 이름과 같고 첫글자가 대문자인데, char타입과 int 타입만 Character과 Integer로 다름
- Wrapper 클래스에서 제공하는 상수와 메서드를 활용하여 기본 데이터타입을 더 다양하게 처리할 수 있도록 도와줌
// Wrapper 클래스의 다양한 상수
System.out.println("byte 타입 메모리 크기(bit) : " + Byte.SIZE);
System.out.println("byte 타입 최소값 : " + Byte.MIN_VALUE);
System.out.println("byte 타입 최대값 : " + Byte.MAX_VALUE);
System.out.println("int 타입 메모리 크기(bit) : " + Integer.SIZE);
System.out.println("int 타입 최소값 : " + Integer.MIN_VALUE);
System.out.println("int 타입 최대값 : " + Integer.MAX_VALUE);
System.out.println("char 타입 메모리 크기(bit) : " + Character.SIZE);
System.out.println("char 타입 최소값 : " + (int)Character.MIN_VALUE);
System.out.println("char 타입 최대값 : " + (int)Character.MAX_VALUE);
System.out.println("double 타입 메모리 크기(bit) : " + Double.SIZE);
System.out.println("double 타입 최소값 : " + Double.MIN_VALUE);
System.out.println("double 타입 최대값 : " + Double.MAX_VALUE);
오토박싱과 오토언박싱
오토 박싱
기본 데이터타입 => Wrapper 클래스 타입 객체로 자동 변환
(실제 데이터를 Heap 공간의 객체에 '포장' 하는 작업을 자동 수행)
ex. int->integer, char -> character
오토 언박싱
Wrapper 클래스 타입 객체 => 기본 데이터타입으로 자동 변환
(Heap 공간의 객체 '포장을 뜯어서' stack 공간에 저장 자동 수행
ex. Integer -> int, Character -> char
//기본 데이터타입 변수 선언하고 값을 저장
int num1 = 10; //정수 10을 기본형 변수 num1에 저장
int num2;
//Wrapper 클래스 중 Integer 타입 객체 생성하고 값을 저장
Integer n1;
//정수 20을 갖는 Interger 객체 생성하고 해당 객체의 주소값을 참조형 변수 n2에 저장
Integer n2 = new Integer(20);
Integer n2 = new Integer("20");//문자열로 된 정수값도 저장 가능
/*
기본 데이터타입은 Stack 공간에 실제 데이터를 직접 저장하고 관리하지만,
객체(참조형)은 Heap 공간에 실제 데이터를 저장되고, 참조 변수가 해당 공간의 주소값을 저장하고 관리함
=> 따라서, 기본 데이터타입의 변수와 참조 데이터타입의 변수는 서로 호환되지 않는다.
자바 1.5버전부터 기본형-> 참조형 변환 과정을 생략하고 자동으로 변환을 수행할 수 있도록 바뀜.
=> 즉 대입 연산자를 통해 일반적인 대입 방법을 사용하면
기본형과 Wrapper 클래스 타입간의 데이터를 전달할 수 있게 되었다.
*/
n1 = num1;
//반대도 물론 가능
num1 = n1;
//Wrapper 클래스의 다양한 메서드
int num1 = 255;
// toXXXString() 메서드 : 10진수 정수 -> X진수로 변환
System.out.println(Integer.toBinaryString(num1)); // 10진수 -> 2진수
System.out.println(Integer.toOctalString(num1)); // 10진수 -> 8진수
System.out.println(Integer.toHexString(num1)); // 10진수 -> 16진수
// Character.isXXX() 메서드를 사용하여 동일한 기능 수행
if(Character.isUpperCase(ch)) {
System.out.println(ch + " = 대문자");
} else if(Character.isLowerCase(ch)) {
System.out.println(ch + " = 소문자");
} else if(Character.isDigit(ch)) {
System.out.println(ch + " = 숫자");
} else if(Character.isWhitespace(ch)) { // isSpace(ch) 대체
System.out.println(ch + " = 공백문자");
} else if(Character.isLetter(ch)) {
System.out.println(ch + " = 기타문자(한글, 한자 등 포함)");
} else {
System.out.println(ch + " = 특수문자(예외 포함)");
}
//더 직관적
'develop > Java' 카테고리의 다른 글
멀티 쓰레드 (0) | 2021.04.19 |
---|---|
enum 타입 (0) | 2021.04.12 |
예외(Exception) (0) | 2021.04.12 |
중첩 클래스 (0) | 2021.04.12 |
제네릭(Generic, 일반화) (1) | 2021.04.05 |