오토박싱(Autoboxing)/언박싱(Unboxing)

2024. 12. 6. 09:04·Language/Java
반응형

Primitive Type과 Wrapper Class

Primitive Type(기본 데이터 타입)

Java에는 8개의 기본 데이터 타입이 있다.

값 자체를 저장하며, 객체가 아닌 단순한 값을 가지기 때문에 메모리 사용과 성능 면에서 효율적이다.

  크기 값의 범위 기본 값
byte 1byte (8bit) -128 ~ 127 0
short 2byte (16bit) -32,768 ~ 32,767 0
int 4byte (32bit) -2^31 ~ 2^31-1 0
long 8byte (64bit) -2^63 ~ 2^63-1 0L
float 4byte (32bit) ±3.40282347E+38F
(6-7자리 유효숫자)
0.0f
double 8byte (64bit) ±1.79769313486231570E+308
(15자리 유효숫자)
0.0d
char 2byte (16bit) 0 ~ 65,535 (유니코드 문자) '\u0000'
boolean 1bit true 또는 false  false

 

  1.  

 

Wrapper Class(래퍼 클래스)

래퍼클래스는 기본 데이터 타입을 객체로 감싸는 클래스이다.

이는 기본 타입의 값을 객체로 다룰 수 있게 해준다. 각 기본 타입에 대응하는 래퍼클래스가 있다.

기본 데이터 타입 래퍼클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

 

장단점

 

  장점 단점
기본 데이터 타입
  • 메모리 사용이 적고 성능이 좋다.
  • 간단한 값 저장 및 연산에 적합하다.
  • 객체로 취급되지 않으므로 컬렉션 프레임 워크와 함께 사용할 수 없다.
래퍼 클래스
  • 객체로 취급되므로 컬렉션 프레임워크와 함께 사용할 수 있다.
  • null 값을 가질 수 있다.
  • 다양한 유틸리티 메서드를 제공한다.
  • 기본 데이터 타입보다 메모리를 더 많이 사용한다.
  • 성능이 기본 데이터 타입보다 떨어질 수 있다.

 

 

 

 

 

 


Autoboxing (오토박싱)

기본 자료형을 자동으로 해당하는 래퍼 클래스로 변환하는 것을 의미한다.

예를 들어, int 를 Integer로 변환하는 것이 오토박싱이다.

메서드 파라미터로 객체가 필요할 때나, 컬렉션에 기본 타입을 추가할 때 사용된다.

 

예시)

public class AutoboxingExample {
    public static void main(String[] args) {
        // 기본 자료형 int를 Integer 객체로 자동 변환 (오토박싱)
        int primitiveInt = 5;
        Integer wrappedInt = primitiveInt; // 오토박싱

        System.out.println("primitiveInt: " + primitiveInt);
        System.out.println("wrappedInt: " + wrappedInt);
    }
}

 

 

Unboxing (언박싱)

래퍼 클래스의 객체를 기본 데이터 타입으로 자동 변환하는 것을 말한다.

이는 객체에서 기본 타입의 값을 필요로 할 때, Java 컴파일러에 의해 자동으로 수행된다.

 

예시)

public class UnboxingExample {
    public static void main(String[] args) {
        // Integer 객체를 기본 자료형 int로 자동 변환 (언박싱)
        Integer wrappedInt = 10;
        int primitiveInt = wrappedInt; // 언박싱

        System.out.println("wrappedInt: " + wrappedInt);
        System.out.println("primitiveInt: " + primitiveInt);
    }
}

 

 

 

 

장점과 주의사항

장점

  • 오토박싱과 언박싱의 코드의 가독성을 높인다.
  • 개발자가 명시적으로 변환할 필요 없이 기본 타입과 객체 타입을 쉽게 상호 변환 해준다.
  • 특히, 컬렉션 프레임 워크 사용 시 기본형 값을 쉽게 추가하고 조작할 수 있다

주의사항

  • 성능 저하: 오토박싱/언박싱 과정에서 추가적인 객체 생성과 메모리 사용으로 인해 성능이 저하될 수 있다.
  • 메모리 사용량 증가: 래퍼 클래스 객체는 기본형보다 더 많은 메모리를 사용한다.
  • 가비지 컬렉션 부담: 생성된 래퍼 객체들은 가비지 컬렉션의 대상이 되어 시스템에 추가적인 부하를 줄 수 있다.
  • 반복문에서의 성능 문제: 특히 반복문 내에서 빈번한 오토박싱/언박싱은 심각한 성능 저하를 초래할 수 있다.
  • 의도치 않은 동작: 개발자가 오토박싱/언박싱의 발생을 인지하지 못하면 예상치 못한 결과가 발생할 수 있다.

 

정리! 가능한 경우 기본 데이터 타입을 직접 사용하고, 특별히 필요한 경우에 래퍼 클래스를 활용하는 것이 좋다.

728x90
반응형

'Language > Java' 카테고리의 다른 글

가비지 컬렉션 (GC; Garbage Collection)  (0) 2024.12.08
Inheritance와 Composition (클래스 간의 관계)  (0) 2024.12.07
Promotion(자동형변환)과 Casting(명시적형변환), Upcasting vs Downcasting  (0) 2024.12.05
String Interning  (1) 2024.12.04
String vs String Builder vs String Buffer  (0) 2024.12.03
'Language/Java' 카테고리의 다른 글
  • 가비지 컬렉션 (GC; Garbage Collection)
  • Inheritance와 Composition (클래스 간의 관계)
  • Promotion(자동형변환)과 Casting(명시적형변환), Upcasting vs Downcasting
  • String Interning
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ncp200
    ncp202
    BFS
    완전탐색
    백트래킹
    CI/CD
    lcs
    Spring Boot
    분할정복
    벨만포드
    ncp
    프로그래머스
    다익스트라
    집합
    github actions
    DFS
    Network
    다이나믹프로그래밍
    백준
    해시
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
오토박싱(Autoboxing)/언박싱(Unboxing)
상단으로

티스토리툴바