[JAVA] 래퍼 클래스Language/Java2024. 6. 24. 22:53
Table of Contents
기본형의 한계
- 객체가 아니기때문에 메서드를 제공할 수 없다
- null값을 가질 수 없다
래퍼 클래스 생성 - 박싱
- 기본형을 래퍼클래스로 변경하는 것을 박싱이라고 한다
Integer.valueOf(10)
을 하면 Integer객체에 들어있는 값을 꺼낼 수 있다.Integer.valueOf()
에는 성능최적화가 되어있는데 String pool과 같이 -128~127범위의 숫자는 pool에 미리 생성해두고 가져와서 사용한다.
때문에 아래와 같은 실행결과를 얻는다
public static void main(String[] args) {
Integer i1 = Integer.valueOf(127);
Integer i2 = Integer.valueOf(127);
System.out.println(i1 == i2);
System.out.println(i1.equals(i2));
Integer i3 = Integer.valueOf(128);
Integer i4 = Integer.valueOf(128);
System.out.println(i3 == i4);
System.out.println(i3.equals(i4));
}
//실행결과
true
true
false
true
intValue() - 언박싱
- 래퍼 클래스에 들어있는 기본형 값을 다시 꺼내는 메서드이다
- 언방식이라고한다.
오토 박싱
Integer value = 7;
int num = value;
자바에서는 편리함을위해 오토박싱을 제공하며 컴파일러가 valueOf()메서드와 intValue()메서드를 자동으로 추가해준다.
주요 메서드와 성능
래퍼 클래스 객체는 아래와같은 여러 편의 메서드를 제공한다
Integer integer = Integer.valueOf(10);
Integer integer2 = Integer.valueOf("10");
int i = Integer.parseInt("20");
System.out.println(integer);
System.out.println(integer2);
System.out.println(i);
int result = integer.compareTo(5);
System.out.println(result);
int sumResult = Integer.sum(10, 20);
int minResult = Integer.min(10, 30);
int maxResult = Integer.max(10, 30);
System.out.println(sumResult);
System.out.println(minResult);
System.out.println(maxResult);
- valueOf()는 래퍼 타입을 반환
- parseInt()는 기본형을 반환
기본형과 래퍼 클래스의 성능에는 차이가 있다 때문에 다양한 기능을 제공하는 래퍼 클래스와 기본형을 상황에 맞게 사용할 수 있다
int iterations = 1_000_000_000;
long startTime, endTime;
long sumPrimitive= 0;
startTime = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
sumPrimitive += i;
}
endTime = System.currentTimeMillis();
System.out.println(sumPrimitive);
System.out.println((endTime - startTime) + "ms");
Long sumWrapper= 0L;
startTime = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
sumWrapper += i;
}
endTime = System.currentTimeMillis();
System.out.println(sumWrapper);
System.out.println((endTime - startTime) + "ms");
//실행결과
499999999500000000
611ms //primitive
499999999500000000
1473ms //wrapper
약 두 배정도의 성능측면에서의 차이가 나는 것을 실행결과로 확인할 수 있다.
하지만 현실적으로 일반적인 애플리케이션을 구현하는 관점에서는 이 차이는 모래알 하나의 차이일뿐이다
즉, 특수한 경우를 제외하고는 Wrapper와 Primitive의 최적화는 큰 차이가 없다.
때문에 일반적인 경우에는 유지보수에 용이한 타입을 구현하는 것이 좋다.
-> 불필요한 최적화를 할 필요는 없다.
728x90
'Language > Java' 카테고리의 다른 글
[JAVA - 자료구조] HashSet (0) | 2024.06.29 |
---|---|
[JAVA] 불변객체 (0) | 2024.06.24 |
[Java] Enum타입 (1) | 2024.06.18 |
[Java] - Generic (1) | 2024.06.15 |
[Java - 자료구조] Set인터페이스 (0) | 2024.06.12 |
@leegeonwoo :: geonwoo
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!