코딩 공부/Java

[Java] Chpater 2- 03) 레퍼클래스 (기본형 참조형)

sintory-04 2025. 2. 25. 16:53

    1️⃣ 래퍼 클래스란?

    - 기본자료형을 객체로 감싸는 클래스임.

    기본 자료형 (Primitive Type) 래퍼 클래스 (Wrapper Class)
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    char Character
    boolean Boolean

    2️⃣ 기본형(Primitive Type)의 종류

    자료형 종류 범위 바이트 비트
    boolean 논리형 true/false 1 8
    char 문자형 0 ~ 65535 유니코드 값 2 16
    byte 정수형 -128 ~ 127 1 8
    short 정수형 -32,768 ~ 32,767 2 16
    int 정수형 -2,147,483,648 ~ 2,147,483,647 4 32
    long 정수형 -9,233,372,036,854,775,808 ~9,233,372,036,854,775,807 8 64
    float 실수형 약 소수점 6~7자리까지 4 32
    double 실수형 약 소수점 15~17자리까지 8 64

    3️⃣ 참조형(Reference Type)

    • 변수에 객체가 담기면 해당 변수를 참조형변수
    • 참조형 변수는 데이터가 저장된 메모리 주소를 가리킴 → Heap 메모리 주소
    • 객체 데이터는 Heap 영역에 저장되어 있기 때문입니다.
    • 객체, 배열등이 참조형에 속합니다.(https://sintory-04.tistory.com/138)
    Person personA = new Person("Steve"); // ✅ 객체가 담긴 personA 는 참조형 변수입니다.
    Syetem.out.println(personA.name);
    System.out.println(personA); // ✅ 출력하면 @123 메모리의 주소값이 출력됩니다.
    // ---------
    int[] arr = {1, 2, 3, 4}; // ✅ 배열이 담긴 arr 는 참조형 변수입니다.
    System.out.println(arr); // ✅ 출력하면 @123 메모리의 주소값이 출력됩니다.

    4️⃣ 래퍼클래스

    1. 래퍼 클래스도 객체이다.

    • 래퍼클래스가 담겨 있는 변수도 참조형 변수이다.
    • 하지만 출력시 메모리 주소값이 나오지 않는다. → 내부적으로toString()이 오버라이딩되어 있기 때문입니다.
    Integer num = 100;
    System.out.println(num); // 출력 100
    • 위에서 toStiring() 얘기를 했는데, 원래 int 와 같은 기본형은 .toStirng() 기능이 지원되지 않는다. > 알고리즘 문제에 유용하다는 것!! 하지만, 메모리를 많이 사용하기 때문에 기본형을 변형하는 방법을 생각하는게 좋다는 것..

    2. 사용이유

    • 기본형은 객체처럼 속성, 기능을 가질 수 없다.
    • 하지만 객체는 기능을 제공할 수 있다.
    • 기본형을 감싼 객체를 만들어 기능을 제공하면 편리하게 데이터처리를 할 수 있다. -> toString 기능을 생각하면 된다.

    5️⃣오토박싱과 언박싱

    • 래퍼클래스 ↔ 기본형으로 형변환은 굉장히 자주 일어난다.
    • Java에서는 이 형변환 과정을 자동으로 지원해준다.

    1. 오토박싱

    : 기본형 → 래퍼형으로 변환하는 과정을 오토박싱

    • Integer는 참조형(객체)이지만 기본형 int 값을 직접 대입할 수 있다.
    • 내부적으로 컴파일러가 자동으로 Integer.valueOf(10)을 호출하여 객체를 생성하기 때문!

    2. 언박싱

    : 래퍼형 → 기본형으로 변환하는 과정으로 오토언박싱

    • numInteger 객체(참조형변수)지만 기본형 int 변수에 대입할 수 있다.
    • 내부적으로 컴파일러가 자동으로 num.intValue()를 호출하여 기본형으로 변환하기 때문!

    6️⃣ 성능차이

    : 래퍼형은 기본형에 비해 연산속도가 느리다.

    • toString() 과 같은 기능을 이용할 수 있는 만큼 연산이 느리다 !
    • 래퍼형은 내부적으로 데이터를 감싸고 있기 때문에 연산 시 불리하다.
    • 객체에서 기본형 값을 꺼내서 연산하는 추가작업이 발생하기 때문!
    • 이런 추가 작업때문에 기본형보다 래퍼클래스는 연산 속도가 느리다.
    • 빠른 작업이 필요한 경우 기본형을 직접 활용하는 것이 좋은 선택이라고 한다.