기본형 타입은 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없다
추가로 기본형 데이터는 null
값을 가질 수 없다 -> 때로는 데이터가 없음을 표현해야함
💡 기본형과 래퍼클래스의 메모리 구조
-> 기본형은 메모리에서 단순히 그 크기만큼의 공간을 차지함
-> 래퍼클래스는 객체 자체를 다루는데 필요한 객체 메타데이터를 포함하므로 더 많은 메모리를 사용
-> 즉 CPU 연산을 많이 하는 경우에는 기본형을 사용하는것을 권장!
int | double | long | boolean | char |
---|---|---|---|---|
Integer 맵핑 | Double 맵핑 | Long 맵핑 | Boolean 맵핑 | Character 맵핑 |
valueOf() 메서드
xxxValue() 메서드
// 기본형 -> 래퍼객체
int value = 7;
Integer boxedValue = Integer.valueOf(value);
// 래퍼객체 -> 기본형
int unboxedValue = boxedValue.intValue();
하지만 개발자들은 이런식으로 변환하는 것이 자주 발생해서 불편함이 발생
-> 이런 문제를 해결하기 위해서 오토박싱
과 오토언박싱
이 등장
-> 이러한 오토박싱
, 오토언박싱
은 개발자 대신 컴파일러가 valueOf
xxxValue()
등 코드를 추가해줌
// 기본형 -> 래퍼객체
int value = 7;
Integer boxedValue = value; // 오토 박싱
// 래퍼객체 -> 기본형
int unboxedValue = boxedValue; // 오토 언박싱
valueOf()
: 래퍼 타입을 반환한다. 숫자, 문자열을 모두 지원한다.parseInt()
: 문자열을 기본형으로 변환한다.compareTo()
: 내 값과 인수로 넘어온 값을 비교한다. 내 값이 크면 1 , 같으면 0 , 내 값이 작으면 -1 을 반환한다.Integer.sum()
, Integer.min()
, Integer.max()
: static 메서드이다. 간단한 덧셈, 작은 값, 큰값 연산을 수행한다 Integer i1 = Integer.valueOf(10);//숫자, 래퍼 객체 반환
Integer i2 = Integer.valueOf("10");//문자열, 래퍼 객체 반환
int intValue = Integer.parseInt("10");//문자열 전용, 기본형 반환
//비교
int compareResult = i1.compareTo(20);
//산술 연산
System.out.println("sum: " + Integer.sum(10, 20));
System.out.println("min: " + Integer.min(10, 20));
System.out.println("max: " + Integer.max(10, 20));
조회 방법 3가지
Class clazz = String.class; // 클래스에서 조회하는 방법
Class clazz = new String().getClass(); // 인스턴스에서 조회하는 방법
Class clazz = Class.forName("java.lang.String"); // 문자열로 조회하는 방법
getDeclaredFields()
: 클래스의 모든 필드를 조회한다.getDeclaredMethods()
: 클래스의 모든 메서드를 조회한다.getSuperclass()
: 클래스의 부모 클래스를 조회한다.getInterfaces()
: 클래스의 인터페이스들을 조회한다