본문 바로가기

JAVA

랩퍼 클래스 - 객지설 4주차

JAVA 객체 유형

기초 자료형(정수형, 실수형 등등)을 제외한 모든 것이 객체임. 

그런데 기초 자료형이 객체로 쓰여야 할 때가 있음.
에를 들어 JAVA에서 Vector는 객체만 저장 가능함. 그래서 Vector에 기초 자료형을 넣고 싶다면 객체로 포장해야 함.
=> 이때 랩퍼 클래스가 사용 됨.

기초 자료형의 객체 만드는 방법

int i = 100; //기초 자료형으로 선언
Integer obj = new Integer(i); // Integer 랩퍼 클래스 객체 만듦 (오류 남)
//바로 선언도 가능함
String s = Integer.toString(100);
int i = Integer.parseInt("100");

=> JAVA 에는 각 기초 자료형에 대하여 해당되는 랩퍼 클래스가 존재함

랩퍼 클래스의 장점
저장된 값을 다른 자료형으로 변환하는 메소드 존재
ex. 객체 안에 있는 값 꺼내기

ex. 기초 자료형을 문자열로 변환

ex. 문자열을 기초 자료형으로 변환

public static void main(String[] args) {
		Integer obj = 100; // Integer 랩퍼 클래스 객체 만듦 (오류 남)
		
		int value = obj.intValue(); //기초 자료형 정수 100으로 반환
		String s = obj.toString(100); // 문자열 "100"으로 반환
		int i = obj.parseInt("100"); //문자열 "100"을 정수형으로 변환
		
	}


오토박싱
JAVA에는 랩퍼 객체와 기초 자료형이 사이의 변환을 자동으로 해주는 오토박싱 기능이 있음
ex. 기초 자료형 int형 정수가 Integer 객체로 자동 변환 됨 (박싱)
ex. Integer 객체가 기초 자료형 int형 정수로 자동 변환 됨 (언 박싱)

Integer obj; // Integer 객체 obj 생성
obj = 10; // 정수 10이지만 obj는 Integer 객체이므로 자동으로 변환됨 (오토박싱)
System.out.println(obj); // Integer 객체의 toString(int i) 메소드가 호출되어 문자열 "10"이 출력됨
System.out.println(obj + 1); // 연산을 위해 자동으로 obj 객체가 int형으로 반환되어 10이 되고, 정수형 11이 출력됨. (언박싱)


박싱 : 객체 생성
언박싱 : 객체 해제

* 오토박싱 주의 사항
기초 자료형은 자동 형변환(타입 확장)이 가능함

double d1 = (double) 10; // 정수형이 부동소수점형으로 형변환 됨
double d2 = 10; // 정수형이 부동소수점 형으로 타입 확장 됨

//JAVA에서는 기본적으로 int형을 double로 생각하기도 함. 단 int만 임.
int x = 10; // 가능
double y = x; // 가능
int z = y; //불가능
int k = (int) y; //가능


그러나 랩퍼 클래스는 자동 형변환(타입 확장)이 일어나지 않음

Double d3 = 10; // 컴파일 에러 : 정수형 10을 부동소수점형 객체에는 박싱할 수 없음
Double d4 = new Double(10); // 1. Double(double value) 생성자 호출 2. 10이 10.0로 변경되어 반환 (타입 확장)



오토 박싱 관련한 코드

public class p340 {

	public static int add (int x, int y) { // 언 박싱
		return (x + y);
	}
	
	public static Integer addRef(Integer x, Integer y) { //두 번째 호출 때는 여기서 박싱
		return (x + y); // 첫 번째 호출 때는 여기서 언 박싱, 두 번째 호출 때 여기서 언 박싱
	}
	
	public static void main(String[] args) {
		Integer x = 10; // Integer 객체 생성
		Integer y = 20; // Integer 객체 생성
		
		Integer z = add(x, y); // 반환된 값 정수 30을 Integer 객체에 저장
		System.out.println(z); // intValue()메소드가 호출되어 문자열 "30" 출력
		
		int w = addRef(x, y); // 반환된 값 정수 30을 기초 자료형 int에 저장
		System.out.println(w); // 정수형 10 출력
		
		int v = addRef(10, 20); // 반환된 값 정수 30을 기초 자료형 int에 저장
		System.out.println(v); // 정수형 10 출력
	}

}

 

'JAVA' 카테고리의 다른 글

인터페이스 - 6주차  (0) 2024.05.05
다형성 - 객지설 5주차  (0) 2024.05.04
객프 13주차  (0) 2023.11.29
객프 11주  (0) 2023.11.21
객프 10주차  (0) 2023.11.14