Home > Backend > Java > ☕️[Java] Primitive Type과 Wrapper Class.

☕️[Java] Primitive Type과 Wrapper Class.
Java Programming Language Backend

1️⃣ 도화선 🧨

‘int와 Integer의 차이가 무엇이 있을까?’ 하는 호기심이 도화선이 되어 이 글을 쓰게 되었습니다 :)

먼저 ‘int와 Integer의 차이’를 알아보니 ‘int’‘Primitive Type’ 이고, ‘Integer’‘Wrapper Class’ 라는 것을 알게 되었습니다.

2️⃣ Primitive Type과 Wrapper Class.

Java에서 Primitive TypeWrapper Class는 각각 기본 데이터 타입과 그 기본 타입을 객체로 감싸는 클래스입니다.

이 둘의 개념과 차이점을 이해하는 것은 Java 프로그래밍에서 매우 중요합니다.

1️⃣ Primitive Type (기본 데이터 타입).

Primitive Type은 Java에서 가장 기본적인 데이터 타입을 말합니다.

Java는 다음과 같은 8가지 기본 데이터 타입을 제공합니다.

    1. boolean : 논리값(true 또는 false).
    1. byte : 8비트 정수.
    1. short : 16비트 정수.
    1. int : 32비트 정수.
    1. long : 64비트 정수.
    1. float : 32비트 부동 소수점.
    1. double : 64비트 부동 소수점.
    1. char : 16비트 유니코드 문자.

이러한 타입들은 성능이 뛰어나고 메모리를 적게 사용하며, 객체를 생성할 필요 없이 값 그 자체를 저장하고 조작할 수 있습니다.

예시

int a = 10;
boolean isJavaFun = true;
char letter = 'A';

2️⃣ Wrapper Class (래퍼 클래스)

Wrapper Class 는 각 Primitive Type 에 대응되는 클래스입니다.

이 클래스들은 Primitive Type을 객체로 감싸기 때문에 “래퍼 클래스” 라고 불립니다.

Java는 각 기본 타입에 대한 래퍼 클래스를 제공합니다.

    1. boolean -> ‘Boolean’
    1. byte -> ‘Byte’
    1. short -> ‘Short’
    1. int -> ‘Integer’
    1. long -> ‘Long’
    1. float -> ‘Float’
    1. double -> ‘Double’
    1. char -> ‘Character’

Wrapper Class 는 다음과 같은 이유로 사용됩니다.

  • Primitive Type 을 객체로 다루어야 할 때(예: 컬렉션 프레임워크에서는 객체만 저장할 수 있음)
  • null 값을 처리해야 할 때
  • 추가 메서드 및 기능을 사용해야 할 때(예: 문자열을 정수로 변환하는 메서드 등)

예시

Integer a = 10;
Boolean isJavaFun = true;
Character letter = 'A';

3️⃣ Autoboxing 과 Unboxing

Java는 기본 타입과 래퍼 클래스 간의 자동 변환을 지원합니다.

이를 AutoboxingUnboxing 이라고 합니다.

  • Autonboxing : 기본 타입이 자동으로 해당 래퍼 클래스 객체로 변환되는 것.

  • Unboxing : 래퍼 클래스 객체가 자동으로 해당 기본 타입으로 변환되는 것,

예시

int primitiveInt = 5;
Integer wrapperInt = primitiveInt; // Autoboxing

Integer anotherWrapperInt = 10;
int anotherPrimitiveInt = anotherWrapperInt; // Unboxing

4️⃣ Primitive Type 과 Wrapper Class의 차이점.

    1. 메모리 사용 :
      • Primitive Type : 메모리 효율적, 객체 오버헤드 없음.
      • Wrapper Class : 객체 오버헤드가 있어 더 많은 메모리 사용.
    1. 기본값 :
      • Primitive Type : 기본값이 정의되어 있음 (예: int는 0, boolean은 false).
      • Wrapper Class : 기본값이 ‘null’ 일 수 있음.
    1. 성능 :
      • Primitive Type : 빠른 연산 속도.
      • Wrapper Class : 객체 생성과 가비지 컬렉션의 오버헤드로 인해 상대적으로 느립.
    1. 기능성 :
      • Primitive Type : 단순한 데이터 저장과 연산에 적합.
      • Wrapper Class : 다양한 유틸리티 메서드 제공 (예: 문자열 반환, 비교 메서드 등).

예제 코드

다음은 Primitive Type과 Wrapper Class의 사용 예를 보여주는 코드입니다.

import java.util.ArrayList;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		// Primitive Type 사용
		int primitiveInt = 100;
		boolean primitiveBoolean = true;

		// Wrapper Class 사용
		Integer wrapperInt = Integer.valueOf(100); // 명시적 변환
		Boolean wrapperBoolean = Boolean.valueOf(true);

		// Autoboxing and Unboxing
		Integer autoboxedInt = 200; // Autoboxing
		int unboxedInt = autoboxedInt; // Unboxing

		// Primitive Type은 컬렉션에 저장할 수 없음
		List<Integer> intList = new ArrayList<>();
		intList.add(primitiveInt); // Autoboxing
		intList.add(wrapperInt);

		// 컬렉션에서 값을 가져올 때 Unboxing
		int sum = 0;
		for (int num : intList) {
			sum += num; // Unboxing
		}

		System.out.println("Sum: " + sum); // Output: Sum: 200
	}
}

이 예제에서는 기본 타입과 래퍼 클래스를 사용하여 변수레 값을 저장하고, 컬렉션에 저장된 래퍼 클래스 객체를 사용하려 연산을 수행하는 과정을 보여줍니다.