728x90
1. [Wrapper Class 사용 용도]
*기본 자료형을 객체 타입으로 변환해야하는 경우
기본 타입(Primitive Type) | Wrapper Class |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
*박싱 방향: ->
*언박싱 방향: <-
*기본 자료형을 객체 타입으로 변환해야하는 경우
▪️ 객체로 저장해야할 경우
▪️ 매개변수로 객체가 요구될 경우 (ex. *제네릭, Collecion 타입)
▪️ 객체간 비교가 필요할 경우
*제네릭 : 모든 종류의 타입을 다룰 수 있도록 일반화된 타입 매개변수로 클래스나 메서드를 선언하는 기법
* 오토 박싱, 오토 언박싱: JDK 1.5부터는 자바 컴파일러가 알아서 자동 처리해줌
편의성을 위해 오토 박싱과 언박싱이 제공되고 있지만, 내부적으로 추가 연산 작업이 거치게 된다.
따라서, 오토 박싱&언박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 구현하자.
100만건 기준으로 약 5배의 성능 차이가 난다. 따라서 서비스를 개발하면서 불필요한 오토 캐스팅이 일어나는 지 확인하는 습관을 가지자.
public class AutoBoxingExample { public static void main(String[] args) { // 기본 타입 int를 Integer 객체로 자동 변환 (AutoBoxing) Integer integerObj = 10; // int -> Integer System.out.println("AutoBoxing: " + integerObj); } } public class AutoUnBoxingExample { public static void main(String[] args) { // Integer 객체를 int 기본 타입으로 자동 변환 (AutoUnBoxing) Integer integerObj = new Integer(20); int num = integerObj; // Integer -> int System.out.println("AutoUnBoxing: " + num); } }
2. [Wrapper Class 특징]
- 산술 연산을 위한 클래스가 아니므로 Immutable하다.(불변 객체이다.)
- 불변 객체이므로 새로운 값 할당이나 참조만 가능하고 변경은 불가하다.
* 문자열 <-> 숫자 변환
// 문자열 -> 기본형 int number1 = Integer.parseInt("100"); // 문자열 -> wrapper class Integer number2 = Integer.valueOf("100");
오토 박싱/언박싱이 지원되므로 둘다 valurOf()를 사용해도 되지만 성능측면에서 조금 더 느리다고 한다.
728x90
'백앤드 > JAVA' 카테고리의 다른 글
[JAVA] 추상 클래스와 인터페이스의 차이 (1) | 2024.10.18 |
---|---|
[JAVA] final, finally, finalize() (0) | 2024.10.18 |
[JAVA] ==는 주소 값, equals는 값 비교 (0) | 2024.10.18 |
[JAVA] 객체지향 프로그래밍 (OOP,Object Oriented Programming) (0) | 2024.10.18 |
[JAVA] String, StringBuilder, StringBuffer 차이 (0) | 2024.10.18 |