JAVA Wrapper Class

김국민·2025년 2월 25일

JAVA

목록 보기
11/21

Wrapper Class

정의 : 기본 자료형을 객체로 감싸는 클래스

기본 자료형 (Primitive Type)래퍼 클래스 (Wrapper Class)
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

기본형(Primitive Type)의 종류

자료형종류범위바이트비트
boolean논리형true/false18
char문자형0 ~ 65535 유니코드 값216
byte정수형-128 ~ 12718
short정수형-32,768 ~ 32,767216
int정수형-2,147,483,648 ~ 2,147,483,647432
long정수형-9,233,372,036,854,775,808 ~9,233,372,036,854,775,807864
float실수형약 소수점 6~7자리까지432
double실수형약 소수점 15~17자리까지864

참조형

  • 변수에 객체가 담기면 해당 변수를 참조형 변수라고 말한다
  • 참조형 변수는 데이터가 저장된 메모리 주소 가르킴 -> Heap메모리주소
  • 객체데이터가 Heap영역에 저장되기 때문에!
  • 객체, 배열 등이 참조형이다

래퍼 클래스가 담긴 변수도 참조형 변수!

근데 출력시 메모리 주소값이 나오지 않음

why? -> 내부적으로 toString()이 오버라이딩 되어있음

래퍼클래스를 사용하는 이유

  1. 기본형은 객체처럼 속성, 기능을 가질 수 없음
  2. 객체는 기능을 제공가능
  3. 기본형을 감싼 객체를 만들어 기능을 제공하면 편리하게 데이터 처리가능

오토박싱 언박싱

오토박싱?

기본형 -> 래퍼형으로 변환하는 과정

Integer num = 10; 
//내부적으로 이렇게 됨
Integer num = Integer.valueOf(10);

언박싱?

래퍼형 -> 기본형으로 변환하는 과정

Integer num = 10;
int num2 = num;
//내부적으로
int a = num.intValue();

성능비교

  • 래퍼형은 내부적으로 데이터를 감싸고 있어서 연산시 불리
  • 객체에서 기본형 값을 꺼내 연산하는 추가작업이 발생
  • 이런 추가 작업때문에 기본형보다 래퍼클래스는 속도 느림
package chapter2.wrapper;

public class PrimitiveWrapper {
    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);


    }
}

결과

profile
개발지망생

0개의 댓글