자바 - 자동박싱과 언박싱

안녕하세요, 미래의 자바 마법사 여러분! 오늘 우리는 자바의 자동박싱과 언박싱의 세계로 흥미로운 여정을 떠납니다. 이 용어들이 지금은 이상한 말처럼 들리더라도, 이 튜토리얼이 끝나면 당신은 이를 마스터로 다루게 될 것입니다!

Java - Autoboxing and Unboxing

자동박싱과 언박싱이란?

먼저, 이 복잡한 용어들을 쉽게 설명해보겠습니다:

  • 자동박싱(Autoboxing): 기본 자료형을 해당 기본 자료형의 워apper 클래스로 자동으로 변환하는 자바의 방법입니다.
  • 언박싱(Unboxing): 반대 과정 - 워apper 클래스 객체를 해당 기본 자료형으로 변환하는 것입니다.

이제 당신이 떠올리는 것은 "하지만 선생님, 기본 자료형과 워apper 클래스는 무엇인가요?" 멋진 질문입니다! 더 나아가기 전에 이를 탐구해보겠습니다.

기본 자료형 vs 워apper 클래스

자바에서는 두 가지 주요 데이터 타입 카테고리가 있습니다:

  1. 기본 자료형(Primitive Types): int, char, boolean 등과 같은 기본적인 건축 블록입니다.
  2. 워apper 클래스(Wrapper Classes): 기본 자료형의 객체 표현인 Integer, Character, Boolean 등과 같은 클래스입니다.

다음은 기본 자료형과 그에 해당하는 워apper 클래스 간의 매핑을 보여주는 유용한 표입니다:

기본 자료형 워apper 클래스
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

자동박싱의 활용

이제 기본 개념을 이해했으므로, 자동박싱을 활용해보겠습니다. 상상해보세요, 당신이 사과를 판매하는 상점 주인이고, 매일 사과 판매 수를 기록해야 할 때. 이렇게 자동박싱을 사용할 수 있습니다:

public class AppleShop {
public static void main(String[] args) {
int applesDay1 = 5;
int applesDay2 = 7;
int applesDay3 = 4;

// 자동박싱이 작동하는 곳
List<Integer> applesSold = new ArrayList<>();
applesSold.add(applesDay1);
applesSold.add(applesDay2);
applesSold.add(applesDay3);

System.out.println("3일 동안 판매된 사과: " + applesSold);
}
}

이 예제에서 우리는 int 값을 List<Integer>에 추가하고 있습니다. 자바는 이 int 기본 자료형을 Integer 객체로 자동으로 변환(자동박싱)합니다. 마법처럼 보이죠 - 특별한 작업을 할 필요가 없습니다!

언박싱: 귀로의 여정

이제 사과의 총 판매 수를 계산하고 싶다고 가정해봅시다. 이때는 언박싱이 적용됩니다:

public class AppleShop {
public static void main(String[] args) {
List<Integer> applesSold = new ArrayList<>(Arrays.asList(5, 7, 4));

int totalApples = 0;
for (Integer applesPerDay : applesSold) {
// 언박싱이 이루어지는 곳
totalApples += applesPerDay;
}

System.out.println("총 판매된 사과 수: " + totalApples);
}
}

이 예제에서 applesPerDayInteger 객체이지만, totalApplesint입니다. 자바는 자동으로 Integerint로 변환(언박싱)합니다.

배후의 마법

이제 "이것은 cool하고 모든 것인데, 실제로 뒤에서 무엇이 일어나고 있나요?" 궁금해할 수 있습니다. 제가 그 커튼을 들어드릴게요!

당신이 다음과 같이 작성할 때:

Integer num = 5;

자바는 실제로 다음과 같이 변환합니다:

Integer num = Integer.valueOf(5);

그리고 다음과 같이 할 때:

int x = num;

자바는 다음과 같이 변환합니다:

int x = num.intValue();

이는 마치 항상 당신의 의도를 알고 있는 매우 효율적인 개인 비서가 있는 것과 같습니다!

주의 사항과 최선의 관행

이제 자동박싱과 언박싱을 마구 활용하러 가기 전에, 몇 가지 것을 기억해야 합니다:

  1. 성능: 편리하지만, 자동박싱과 언박싱은 작은 성능 비용이 있습니다. 성능이 중요한 코드에서는 기본 자료형을 직접 사용하는 것이 좋습니다.

  2. 널 포인터 예외: 워apper 클래스는 널이 될 수 있지만, 기본 자료형은 그렇지 않습니다. 언박싱할 때 주의하세요!

Integer nullInteger = null;
int x = nullInteger; // 이는 NullPointerException을 발생시킬 것입니다!
  1. 평등성: 워apper 객체를 비교할 때는 .equals()를 사용하고 ==를 사용하지 마세요:
Integer a = 100;
Integer b = 100;
System.out.println(a == b);      // true를 출력할 수 있습니다
System.out.println(a.equals(b)); // 항상 true를 출력합니다

Integer c = 1000;
Integer d = 1000;
System.out.println(c == d);      // false를 출력합니다
System.out.println(c.equals(d)); // true를 출력합니다

마무리 ( pun을 의도했습니다!)

이제 여러분은 자바의 자동박싱과 언박싱의 미스터리를 풀어냈습니다. 이 기능들은 당신의 삶을 더 쉽게 만들기 위해 여기에 있습니다. 하지만 어떤 도구처럼, 이를 지혜롭게 사용해야 합니다.

자바 여정을 계속하면서, 자동박싱과 언박싱이 유용한 많은 경우를 발견하게 될 것입니다. 이는 마치 다양한 기능을 갖춘瑞士軍刀 같은东西 - 다재다능하며 유용하고, 때로는 조금 마법적입니다.

계속 연습하고, 호기심을 가지고 있으면, 당신은 곧 최고의 자동박싱과 언박싱을 할 수 있을 것입니다. 행복하게 코딩하세요, 미래의 자바 마스터 여러분!

Credits: Image by storyset