[TIL 53일차] 자바 복습 정리 14

이건·2024년 8월 11일

자바 기본형의 한계

자바의 기본형(Primitive Types)은 다음과 같은 8가지 데이터 타입으로 구성된다: byte, short, int, long, float, double, char, boolean. 이들 각각은 특정한 용도와 한계를 가지고 있다. 기본형의 한계는 다음과 같다.

  1. 메모리 제한: 각 기본형은 고정된 크기를 가지며, 그로 인해 표현할 수 있는 값의 범위가 제한적이다.

    • byte: -128 ~ 127
    • short: -32,768 ~ 32,767
    • int: -2,147,483,648 ~ 2,147,483,647
    • long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    • float: 약 -3.4028235E38 ~ 3.4028235E38 (7자리 정밀도)
    • double: 약 -1.7976931348623157E308 ~ 1.7976931348623157E308 (15자리 정밀도)
  2. 객체 지향적 특성 부족: 기본형은 객체가 아니기 때문에 메서드나 속성을 가질 수 없다. 따라서 객체 지향 프로그래밍의 장점을 활용할 수 없다.

  3. Null 값 처리 불가: 기본형은 null 값을 가질 수 없다. 이로 인해 null 체크를 통해 예외 처리를 하는 것이 불가능하다. 대신, 참조형(Wrapper Class) 사용 시 null을 사용할 수 있다.

  4. 자동 박싱 및 언박싱의 성능 문제: 기본형을 객체로 변환하는 과정에서 성능 저하가 발생할 수 있다. 예를 들어, Integer 클래스를 사용할 때 자동 박싱 및 언박싱이 필요하다.

  5. 범위 초과: 기본형의 범위를 초과하는 값은 잘못된 계산이나 예외를 발생시킬 수 있다. 예를 들어, int 타입의 최대값에 1을 더하면 오버플로우가 발생하다.

이러한 한계로 인해 자바에서는 기본형 외에도 참조형(Wrapper Class)과 같은 대안이 존재하여 좀 더 유연한 데이터 처리가 가능하다.

자바 래퍼 클래스

자바에서 래퍼 클래스(Wrapper Class)는 기본형 데이터 타입을 객체로 감싸는 클래스다. 래퍼 클래스를 사용하면 기본형의 값을 객체처럼 다룰 수 있으며, 객체 지향 프로그래밍의 이점을 활용할 수 있다. 자바에서 제공하는 래퍼 클래스는 다음과 같다:

  1. Byte: byte 기본형을 감싸는 클래스.
  2. Short: short 기본형을 감싸는 클래스.
  3. Integer: int 기본형을 감싸는 클래스.
  4. Long: long 기본형을 감싸는 클래스.
  5. Float: float 기본형을 감싸는 클래스.
  6. Double: double 기본형을 감싸는 클래스.
  7. Character: char 기본형을 감싸는 클래스.
  8. Boolean: boolean 기본형을 감싸는 클래스.

래퍼 클래스의 주요 특징

  1. 객체 지향적: 래퍼 클래스는 객체로 취급되므로 메서드와 필드를 가질 수 있다.

  2. Null 값 처리: 래퍼 클래스는 null 값을 가질 수 있어, 기본형 데이터 타입이 가질 수 없는 null 체크를 사용할 수 있다.

  3. 자동 박싱 및 언박싱: 자바 5부터는 자동 박싱(기본형을 래퍼 클래스로 변환)과 언박싱(래퍼 클래스를 기본형으로 변환) 기능이 추가되어 코드가 간결해졌다.

    Integer intObj = 10; // 자동 박싱
    int num = intObj;    // 자동 언박싱
  4. 컬렉션과의 호환성: 자바의 컬렉션 프레임워크는 객체만 저장할 수 있기 때문에, 기본형을 사용할 수 없고 래퍼 클래스를 사용해야 한다.

    List<Integer> list = new ArrayList<>();
    list.add(5); // Integer로 자동 박싱됨

예제 코드

래퍼 클래스를 사용하는 간단한 예제

public class WrapperExample {
    public static void main(String[] args) {
        // 자동 박싱
        Integer integerObj = 100;
        
        // 언박싱
        int primitiveInt = integerObj;
        
        // null 값 처리
        Integer nullObj = null;
        if (nullObj != null) {
            System.out.println("값: " + nullObj);
        } else {
            System.out.println("null 값입니다.");
        }

        // 컬렉션 사용 예
        List<Double> doubleList = new ArrayList<>();
        doubleList.add(10.5); // 자동 박싱
        System.out.println("리스트의 첫 번째 값: " + doubleList.get(0)); // 자동 언박싱
    }
}

이처럼 래퍼 클래스는 기본형의 한계를 극복하고, 객체 지향 프로그래밍의 유연성을 제공하는 중요한 역할을 한다.

래퍼 클래스 - 주요 메서드

자바의 래퍼 클래스는 기본형 데이터를 객체로 감싸고, 다양한 유용한 메서드를 제공한다. 각 래퍼 클래스는 기본형 데이터 타입에 따라 다르지만, 공통적으로 사용되는 주요 메서드는 다음과 같다:

1. Integer 클래스

  • intValue(): Integer 객체의 값을 기본형 int로 반환한다.
  • parseInt(String s): 문자열을 int로 변환한다.
  • toString(): Integer 객체의 값을 문자열로 반환한다.
  • compareTo(Integer anotherInteger): 두 Integer 객체를 비교한다.

2. Double 클래스

  • doubleValue(): Double 객체의 값을 기본형 double로 반환한다.
  • parseDouble(String s): 문자열을 double로 변환한다.
  • toString(): Double 객체의 값을 문자열로 반환한다.
  • compareTo(Double anotherDouble): 두 Double 객체를 비교한다.

3. Character 클래스

  • charValue(): Character 객체의 값을 기본형 char로 반환한다.
  • isDigit(char ch): 주어진 문자가 숫자인지 확인한다.
  • isLetter(char ch): 주어진 문자가 알파벳인지를 확인한다.
  • toString(): Character 객체의 값을 문자열로 반환한다.

4. Boolean 클래스

  • booleanValue(): Boolean 객체의 값을 기본형 boolean으로 반환한다.
  • parseBoolean(String s): 문자열을 boolean으로 변환한다.
  • toString(): Boolean 객체의 값을 문자열로 반환한다.
  • compareTo(Boolean b): 두 Boolean 객체를 비교한다.

5. Float, Long, Byte, Short 클래스

이들 클래스도 doubleValue(), longValue(), byteValue(), shortValue() 메서드를 각각 가지고 있으며, parseFloat(String s), parseLong(String s), parseByte(String s), parseShort(String s) 메서드 등을 제공한다.

예제 코드

IntegerDouble 래퍼 클래스의 주요 메서드를 사용하는 예제

public class WrapperMethodsExample {
    public static void main(String[] args) {
        // Integer 클래스
        Integer intObj = 42;
        System.out.println("정수 값: " + intObj.intValue()); // int로 변환
        System.out.println("문자열로 변환: " + intObj.toString());
        System.out.println("문자열을 int로 변환: " + Integer.parseInt("123"));

        // Double 클래스
        Double doubleObj = 3.14;
        System.out.println("실수 값: " + doubleObj.doubleValue()); // double로 변환
        System.out.println("문자열로 변환: " + doubleObj.toString());
        System.out.println("문자열을 double로 변환: " + Double.parseDouble("2.71"));
    }
}

이와 같이 래퍼 클래스는 기본형 데이터를 객체로 다룰 수 있게 해주며, 다양한 메서드를 통해 데이터 변환 및 조작을 쉽게 할 수 있도록 도와준다.

0개의 댓글