Person personA = new Person("Steve"); // ✅ 객체가 담긴 personA 는 참조형 변수입니다.
Syetem.out.println(personA.name);
System.out.println(personA); // ✅ 출력하면 @123 메모리의 주소값이 출력됩니다.
public class PrimitiveVsWrapperPerformance {
public static void main(String[] args) {
int iteration = 10_000_000; // 1000만 번 반복
// 기본형 int 연산 성능 테스트
long startTime1 = System.nanoTime();
int sum1 = 0;
for (int i = 0; i < iteration; i++) {
sum1 += i; // 기본형 연산
}
long endTime1 = System.nanoTime();
long primitiveTime = endTime1 - startTime1;
// 래퍼 클래스 Integer 연산 성능 테스트
long startTime2 = System.nanoTime();
Integer sum2 = 0;
for (int i = 0; i < iteration; i++) {
sum2 += i; // 오토박싱 & 언박싱 발생
}
long endTime2 = System.nanoTime();
long wrapperTime = endTime2 - startTime2;
// 결과 출력
System.out.println("기본형(int) 연산 시간: " + primitiveTime + " ns");
System.out.println("래퍼 클래스(Integer) 연산 시간: " + wrapperTime + " ns");
System.out.println("성능 차이 (배수): " + (double) wrapperTime / primitiveTime);
}
}
실행 결과: 래퍼형이 기본형보다 13배 느리게 동작한다.
7. 실습 과제
double 기본형과 직접만든 MyDouble 래퍼형의 연산 성능차이 확인하기
정답 (강의자료 가져왔다....😂)
// 직접 만든 Double 래퍼 클래스
class MyDouble {
private final double value;
public MyDouble(double value) {
this.value = value;
}
public double getValue() {
return value;
}
// 덧셈
public MyDouble add(MyDouble other) {
return new MyDouble(this.value + other.value);
}
@Override
public String toString() {
return String.valueOf(value);
}
}
public class DoubleWrapperPerformance {
public static void main(String[] args) {
int iteration = 10_000_000; // 1000만 번 반복
// 1. 기본형 double 연산
long startTime1 = System.nanoTime();
double sum1 = 0.0;
for (int i = 0; i < iteration; i++) {
sum1 += i * 1.1;
}
long endTime1 = System.nanoTime();
long primitiveTime = endTime1 - startTime1;
// 2. MyDouble 연산
long startTime3 = System.nanoTime();
MyDouble sum3 = new MyDouble(0.0);
for (int i = 0; i < iteration; i++) {
sum3 = sum3.add(new MyDouble(i * 1.1));
}
long endTime3 = System.nanoTime();
long myDoubleTime = endTime3 - startTime3;
// 결과 출력
System.out.println("기본형(double) 연산 시간: " + primitiveTime + " ns");
System.out.println("MyDouble 클래스 연산 시간: " + myDoubleTime + " ns");
System.out.println("MyDouble vs double 성능 차이: " + (double) myDoubleTime / primitiveTime);
}
}