Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바에서 원시 타입을 래퍼 클래스로 변환하는 방법

래퍼 클래스(Wrapper Class)란?

자바는 java.lang 패키지에서 래퍼 클래스라고 불리는 특별한 클래스들을 제공합니다. 래퍼 클래스는 int, char, double 같은 원시 타입(primitive type)을 객체 형태로 감싸는 역할을 합니다. 원시 타입 자체는 객체가 아니기 때문에 객체가 요구되는 상황에서는 반드시 래퍼 클래스로 변환해야 합니다.

자바가 제공하는 여덟 가지 원시 타입에는 각각 대응되는 래퍼 클래스가 있습니다.

  • byte → Byte
  • short → Short
  • int → Integer
  • long → Long
  • float → Float
  • double → Double
  • char → Character
  • boolean → Boolean

래퍼 클래스가 필요한 이유

래퍼 클래스를 사용하면 다음과 같은 작업이 가능해집니다.

  • 컬렉션 프레임워크 활용: ArrayList, HashMap 등의 컬렉션은 객체만 저장할 수 있으므로, 원시 값을 저장하려면 래퍼 클래스로 변환해야 합니다.
  • 네트워크 전송: 네트워크를 통해 데이터를 주고받을 때 값을 객체 형태로 전달할 수 있습니다.
  • 다양한 유틸리티 메서드: 값 비교(compareTo), 문자열 변환(toString), 파싱(parseInt) 등 유용한 메서드를 제공합니다.

원시 타입을 래퍼 객체로 변환하기

다음 예제는 사용자로부터 정수를 입력받아 Integer 객체로 변환한 뒤, 문자열로 출력하고 다른 값과 비교하는 과정을 보여줍니다.

import java.util.Scanner;

public class WrapperExample {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("정수를 입력하세요: ");
        int i = sc.nextInt();

        // int 값을 Integer 객체로 변환 (박싱)
        Integer obj = Integer.valueOf(i);

        // Integer 객체를 String으로 변환
        String str = obj.toString();
        System.out.println(str);

        // 다른 Integer 객체와 비교
        int result = obj.compareTo(Integer.valueOf("124"));
        if (result == 0) {
            System.out.println("두 값이 같습니다.");
        } else {
            System.out.println("두 값이 같지 않습니다.");
        }
    }
}

실행 결과

정수를 입력하세요:
1211
1211
두 값이 같지 않습니다.

참고로 new Integer(i)처럼 생성자를 직접 호출하는 방식은 Java 9부터 사용이 권장되지 않으므로(deprecated), 위 예제처럼 Integer.valueOf() 메서드를 사용하는 것이 좋습니다.

오토박싱과 언박싱

Java 5부터는 컴파일러가 원시 타입과 래퍼 객체 사이의 변환을 자동으로 처리해 주는 오토박싱(autoboxing)언박싱(unboxing) 기능이 도입되었습니다.

Integer num = 10;   // 오토박싱: int → Integer 자동 변환
int n = num;        // 언박싱: Integer → int 자동 변환

덕분에 개발자는 일반적인 코드에서 변환 과정을 명시적으로 작성하지 않아도 됩니다. 다만 반복문 안에서 박싱과 언박싱이 빈번하게 발생하면 성능 저하가 있을 수 있으므로 주의가 필요합니다.

정리

원시 타입을 래퍼 클래스로 변환하는 대표적인 방법은 다음과 같습니다.

  • 래퍼 클래스의 valueOf() 메서드 사용 (권장)
  • 오토박싱 활용
  • 생성자 직접 호출 — 단, 현재는 deprecated 되어 권장되지 않음

래퍼 클래스를 잘 활용하면 컬렉션 처리, null 값 표현, 다양한 유틸리티 메서드 활용 등에서 더욱 유연하고 안전한 코드를 작성할 수 있습니다.