본문 바로가기

develop/Java

Wrapper 클래스

 

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