본문 바로가기
Java

기본형(Primitive) vs 참조형(Reference) vs 래퍼 클래스(Wrapper Class)

by asdft 2024. 1. 19.

참조형 (Reference Type) VS 기본형 (Primitive Type)

• 자료형은 크게 '기본형'과 '참조형'으로 나뉜다.

• 기본형(Primitive Type) : 계산을 위한 실제값을 저장한다.

    →  논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)

  참조형(reference type) : 객체의 주소를 저장한다.

    →  8개의 기본형을 제외한 나머지 타입들

 

 

래퍼 클래스(Wrapper Class)란?

  기본형 데이터 타입(primitive type)을 객체로 변환한 클래스

  wrapper 클래스를 시용하면 기본형(primitive) 값을 객체로 다룰 수 있다.


 

래퍼 클래스(Wrapper Class) 사용 이유?

  기본형(Primitive Type)을 객체(Object)로 변환할 수 있다.

  →  primitive 타입을 객체로 만들어 null값을 넣거나, 메서드를 사용할 수 있다.

Long id = null; // 가능
// long id = null;  // Error! 기본형에는 null을 넣을 수 없다.

String s = id.toString();  // toString() 메서드 사용 가능

 

 

   java.util 패키지의 클래스는 객체만 처리하므로 래퍼 클래스가 필요하다.

      •   Date, Calendar 클래스

      •   Collection Framework 관련 인터페이스와 클래스

 

   Collection Framework의 데이터 구조는 기본 타입(primitive type)이 아닌 객체만 저장한다.

      •   Generics 타입에 primitive는 사용할 수 없다.

// List<int> list = new ArrayList<>();  // Error! int형과 같은 기본형은 Generics 타입에 사용불가
List<Integer> list = new ArrayList<>();

// Set<char> set = new HashSet<>();  // Error! char형 Generics타입에 사용불가
Set<Character> set = new HashSet<>();

// Map<String, int> map = new HashMap<>(); // Error! int형 사용불가
Map<String, Integer> map = new HashMap<>();

 

 

    멀티쓰레딩에서 동기화를 지원하려면 객체가 필요하다.


박싱(Boxing)과 언박싱(UnBoxing)

 

    박싱(Boxing) : 기본형 데이터 타입(primitive type) → 래퍼 클래스(wrapper class)의 인스턴스로 변환

    언박싱(Un-Boxing) : 래퍼 클래스(wrapper class) → 기본형 타입(primitive type)으로 변환

    오토박싱(Auto Boxing) : 자바 컴파일러가 primitive → wrapper class 로 자동 변환

    오토언박싱(Auto Un-Boxing) : 자바 컴파일러가 wrapper class → primitve 로 자동 변환

 

 

 

래퍼 클래스(Wrapper Class)의 메서드

 

     래퍼 클래스들은 모두 equals()가 오버라이딩되어 있다. → 주소값이 아닌 객체로 값을 비교

     래퍼 클래스와 기본형 타입을 서로 비교할 때는 ==, equals() 모두 사용 가능하다. → 오토 박싱, 언박싱

     비교 연산자 사용 불가 → compareTo() 사용

     toString() 도 오버라이딩되어 있다. → 객체가 갖고 있는 값 문자열 반환 가능

 

 

기본형(primitive) vs. 래퍼 클래스(wrapper class)

기본형(primitive)  래퍼클래스(wrapper class)
null 불가 null 허용
JVM stack 메모리에 저장된다 → 접근이 쉽고 빠르다. JVM heap 메모리에 저장된다 → 비교적 메모리 접근 속도가 느리다.
변수 값을 간편하게 선언할 수 있다. 대용량 계산을 빠르게 처리할 수 있다. 프로그램이 객체지향적이 되도록 돕는다.
값을 그대로 저장하며, 값의 변경이 가능하다. 저장된 값을 변경할 수 없다. 변경하려는 값이 든 인스턴스를 새로 생성하여, 새 인스턴스의 주소값만 참조할 수 있다.
Collection Framework 데이터 구조는 기본형을 저장할 수 없다. Collection Framework 데이터 구조는 객체를 저장하므로 래퍼 클래스를 사용할 수 있다.
Generics 타입으로 들어갈 수 없다. Generics 타입으로 들어갈 수 있다.

 

 

 

 

[참고]

https://velog.io/@kimdy0915/%EA%B8%B0%EB%B3%B8%ED%98%95primitive-vs.-%EB%9E%98%ED%8D%BC-%ED%81%B4%EB%9E%98%EC%8A%A4wrapper-class

 

기본형(primitive) vs. 래퍼 클래스(wrapper class)

자료형은 크게 ‘기본형’과 ‘참조형’으로 나뉜다.기본형(primitive type) : 계산을 위한 실제 값을 저장한다.논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)참조형(referen

velog.io

Effective Java 3/E

'Java' 카테고리의 다른 글

[Java] ArrayList와 LinkedList의 차이  (0) 2024.02.18
[Java] ArrayList 사용법  (1) 2024.02.18
HashMap 사용법 (개념, 특징, 메소드)  (0) 2024.02.16
Iterator란? Iterator 사용하는 이유 & 사용법  (0) 2024.02.16
Stack / Queue  (0) 2024.01.22