코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java Wrapper Classes

자바 래퍼 클래스 (Java Wrapper Classes): 개념 및 사용법

  • *래퍼 클래스(Wrapper Classes)**는 자바에서 기본 데이터 타입(primitive data types)을 객체로 감싸는 클래스입니다. 기본 데이터 타입은 객체가 아니므로 객체가 요구되는 상황에서는 사용할 수 없습니다. 이 문제를 해결하기 위해 자바는 래퍼 클래스를 제공하며, 기본 타입을 객체로 다룰 수 있도록 합니다. 자바의 래퍼 클래스는 기본 타입에 대응하는 객체 타입을 제공합니다.

1. 자바의 기본 타입과 대응하는 래퍼 클래스

자바에는 8가지 기본 데이터 타입이 있으며, 각 타입에 대응하는 래퍼 클래스가 존재합니다.

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

2. 래퍼 클래스의 사용 이유

2.1 객체가 필요한 경우

자바의 컬렉션 프레임워크(예: ArrayList, HashMap 등)는 기본 타입을 직접 다룰 수 없고 객체만 다룰 수 있습니다. 이때 기본 타입을 객체로 변환하기 위해 래퍼 클래스를 사용합니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // 기본 타입은 ArrayList에 직접 저장할 수 없으므로 래퍼 클래스 사용
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(10);  // 자동으로 int -> Integer로 변환 (오토박싱)
        numbers.add(20);

        System.out.println(numbers);  // 출력: [10, 20]
    }
}

2.2 유틸리티 메서드 제공

래퍼 클래스는 기본 타입의 값을 문자열로 변환하거나, 문자열을 기본 타입으로 변환하는 등의 유틸리티 메서드를 제공합니다.

public class Main {
    public static void main(String[] args) {
        // 문자열을 기본 타입으로 변환
        int num = Integer.parseInt("123");
        System.out.println(num);  // 출력: 123

        // 기본 타입을 문자열로 변환
        String str = Integer.toString(456);
        System.out.println(str);  // 출력: "456"
    }
}

3. 오토박싱과 언박싱 (Autoboxing and Unboxing)

  • *오토박싱(Autoboxing)**과 **언박싱(Unboxing)**은 자바 5부터 도입된 기능으로, 기본 타입래퍼 클래스 간의 자동 변환을 지원하는 기능입니다.
  • 오토박싱(Autoboxing): 기본 타입이 자동으로 대응되는 래퍼 클래스로 변환되는 것.
  • 언박싱(Unboxing): 래퍼 클래스의 객체가 자동으로 기본 타입으로 변환되는 것.

3.1 오토박싱 예제

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // 오토박싱: int -> Integer로 자동 변환
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(10);  // int 타입이 Integer 객체로 변환되어 저장됨
        numbers.add(20);

        System.out.println(numbers);  // 출력: [10, 20]
    }
}

3.2 언박싱 예제

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(10);  // 오토박싱
        numbers.add(20);

        // 언박싱: Integer -> int로 자동 변환
        int num = numbers.get(0);  // Integer 객체가 int로 자동 변환됨
        System.out.println(num);  // 출력: 10
    }
}

4. 래퍼 클래스의 주요 메서드

각 래퍼 클래스는 다양한 유틸리티 메서드를 제공하며, 특히 문자열을 기본 타입으로 변환하거나 기본 타입을 문자열로 변환하는 기능이 자주 사용됩니다.

4.1 parseXXX() 메서드

parseXXX() 메서드는 문자열을 해당 기본 타입으로 변환할 때 사용됩니다.

public class Main {
    public static void main(String[] args) {
        // 문자열을 int로 변환
        int intValue = Integer.parseInt("123");
        System.out.println(intValue);  // 출력: 123

        // 문자열을 boolean으로 변환
        boolean boolValue = Boolean.parseBoolean("true");
        System.out.println(boolValue);  // 출력: true
    }
}

4.2 valueOf() 메서드

valueOf() 메서드는 문자열을 래퍼 클래스 객체로 변환합니다.

public class Main {
    public static void main(String[] args) {
        // 문자열을 Integer 객체로 변환
        Integer integerObject = Integer.valueOf("123");
        System.out.println(integerObject);  // 출력: 123

        // 문자열을 Boolean 객체로 변환
        Boolean booleanObject = Boolean.valueOf("true");
        System.out.println(booleanObject);  // 출력: true
    }
}

4.3 toString() 메서드

toString() 메서드는 기본 타입이나 래퍼 클래스 객체를 문자열로 변환합니다.

public class Main {
    public static void main(String[] args) {
        int intValue = 123;
        String intStr = Integer.toString(intValue);  // int를 문자열로 변환
        System.out.println(intStr);  // 출력: "123"

        Double doubleValue = 45.67;
        String doubleStr = doubleValue.toString();  // Double 객체를 문자열로 변환
        System.out.println(doubleStr);  // 출력: "45.67"
    }
}

5. 기본 타입과 래퍼 클래스의 차이점

특징 기본 타입 (Primitive Type) 래퍼 클래스 (Wrapper Class)
메모리 사용 더 적은 메모리 사용 객체로 처리되므로 더 많은 메모리 사용
값 비교 == 연산자를 사용한 값 비교 equals() 메서드를 사용한 값 비교
기본값 기본 값이 존재 (예: int는 0) null 허용 (객체이기 때문에 기본값이 없음)
컬렉션 사용 가능 여부 컬렉션에서 사용 불가 컬렉션에서 사용 가능

5.1 기본 타입 vs 래퍼 클래스 비교 예제

public class Main {
    public static void main(String[] args) {
        // 기본 타입
        int x = 100;
        int y = 100;
        System.out.println(x == y);  // true (값 비교)

        // 래퍼 클래스
        Integer a = 100;
        Integer b = 100;
        System.out.println(a == b);  // true (같은 객체 참조)

        Integer c = new Integer(100);
        Integer d = new Integer(100);
        System.out.println(c == d);  // false (서로 다른 객체 참조)
        System.out.println(c.equals(d));  // true (값 비교)
    }
}

주의사항: == 연산자와 equals() 메서드

  • == 연산자참조 비교를 수행하며, 두 객체가 같은 객체인지 여부를 확인합니다.
  • equals() 메서드값 비교를 수행하며, 두 객체가 같은 값을 가지고 있는지 확인합니다.

6. null과 래퍼 클래스

기본 타입은 null 값을 가질 수 없지만, 래퍼 클래스는 null 값을 가질 수 있습니다. 이로 인해, null 값이 필요하거나 객체로 데이터를 표현해야 하는 경우 래퍼 클래스를 사용합니다.

public class Main {
    public static void main(String[] args) {
        // 기본 타입은 null 값을 가질 수 없음
        // int x = null;  // 컴파일 오류 발생

        // 래퍼 클래스는 null 값을 가질 수 있음
        Integer y = null;
        System.out.println(y);  // 출력: null
    }
}

7. 자주 사용하는 래퍼 클래스

7.1 Integer

  • Integer 클래스는 int 타입을 감싸는 래퍼 클래스입니다.
  • Integer.parseInt(String)을 사용해 문자열을 정수로 변환할 수 있습니다.
  • `Integer

.toString(int)`을 사용해 정수를 문자열로 변환할 수 있습니다.

7.2 Double

  • Double 클래스는 double 타입을 감싸는 래퍼 클래스입니다.
  • Double.parseDouble(String)을 사용해 문자열을 실수로 변환할 수 있습니다.
  • Double.toString(double)을 사용해 실수를 문자열로 변환할 수 있습니다.

7.3 Boolean

  • Boolean 클래스는 boolean 타입을 감싸는 래퍼 클래스입니다.
  • Boolean.parseBoolean(String)을 사용해 문자열을 불리언 값으로 변환할 수 있습니다.
  • Boolean.toString(boolean)을 사용해 불리언 값을 문자열로 변환할 수 있습니다.

요약

  • *래퍼 클래스(Wrapper Class)**는 자바의 기본 데이터 타입을 객체로 다루기 위한 클래스입니다.
  • 자바에서 기본 타입과 래퍼 클래스 간의 변환은 **오토박싱(Autoboxing)**과 **언박싱(Unboxing)**을 통해 자동으로 이루어질 수 있습니다.
  • 래퍼 클래스는 기본 타입을 컬렉션에 저장하거나 객체가 필요한 메서드에서 사용할 때 유용합니다.
  • parseXXX()valueOf() 같은 유틸리티 메서드를 제공하여 문자열과 기본 타입 간의 변환을 쉽게 할 수 있습니다.

래퍼 클래스는 객체와 기본 타입 간의 상호작용을 가능하게 하며, 기본 데이터 타입을 객체로 처리해야 하는 상황에서 유용하게 사용할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com