기본형 타입은 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없다
추가로 기본형 데이터는 null 값을 가질 수 없다 -> 때로는 데이터가 없음을 표현해야함
💡 기본형과 래퍼클래스의 메모리 구조
-> 기본형은 메모리에서 단순히 그 크기만큼의 공간을 차지함
-> 래퍼클래스는 객체 자체를 다루는데 필요한 객체 메타데이터를 포함하므로 더 많은 메모리를 사용
-> 즉 CPU 연산을 많이 하는 경우에는 기본형을 사용하는것을 권장!
Wrapper 클래스 안의 유틸리티 메소드 를 사용할 수 있음 ex) 문자열 변환, 비교 등List<int> list (불가능) List<Integer> list (가능)| int | double | long | boolean | char |
|---|---|---|---|---|
| Integer 맵핑 | Double 맵핑 | Long 맵핑 | Boolean 맵핑 | Character 맵핑 |
valueOf() 메서드xxxValue() 메서드// 기본형 -> 래퍼객체
List<Integer> list = new ArrayList<>();
int value = 7;
list.add(Integer.valueOf(value)); // 정수형 7 값을 객체인 래퍼클래스로 만들어서 리스트에 삽입
// 래퍼객체 -> 기본형
int value2 = list.get(0).intValue(); // 래퍼클래스인 Integer 값을 기본형인 정수형으로 변환해서 값 저장
하지만 개발자들은 이런식으로 변환하는 것이 자주 발생해서 불편함이 발생
-> 이런 문제를 해결하기 위해서 오토박싱 과 오토언박싱이 등장
-> 이러한 오토박싱 , 오토언박싱 은 개발자 대신 컴파일러가 valueOf xxxValue() 등 코드를 추가해줌
// 기본형 -> 래퍼객체
List<Integer> list = new ArrayList<>();
int value = 7;
list.add(a); // 자동으로 Integer.valueOf()
// 래퍼객체 -> 기본형
int value2 = list.get(0); // 자동으로 .intValue()
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() : 클래스의 인터페이스들을 조회한다