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 |