Wrapper, Enum 클래스

18613 단어 JavaJava

래퍼 클래스(Wrapper class)

원시 타입의 값에서 메서드를 호출하거나, 객체 타입의 인수가 필요한데 원시값을 넣는 경우 등 원시값을 객체로 변환해야 하는 경우가 존재한다.

이렇게 원시 타입의 값을 객체로 포장해 주는 클래스를 래퍼 클래스라고 한다.

모든 래퍼 클래스는 java.lang 패키지에 있다.

래퍼 클래스 목록

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

불변성(immutability)

래퍼 클래스는 연산을 위해 정의된 클래스가 아니어서 인스턴스에 저장된 값을 변경할 수 없다.

박싱(Boxing), 언박싱(Unboxing)

원시값을 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱이라 하고, 그 역으로 하는 과정을 언박싱이라 한다.

Integer num = new Integer(17); // 박싱
int n = num.intValue();        // 언박싱
System.out.println(n);

오토박싱(Auto Boxing), 오토언박싱(Auto Unboxing)

JDK 1.5부터 지원되는 기능으로, 박싱과 언박싱을 필요한 상황에서 자동으로 처리해 주는 것을 말한다.

Character ch = 'X'; // Character ch = new Character('X'); : 오토박싱
char c = ch;        // char c = ch.charValue();           : 오토언박싱
System.out.println(c);

인스턴스들 간의 비교

'==' 연산자 대신 equals 메서드를 사용해야 의도된 결과를 얻을 수 있다.

public class Wrapper03 {
    public static void main(String[] args) {
        Integer num1 = new Integer(10);
        Integer num2 = new Integer(20);
        Integer num3 = new Integer(10);

        System.out.println(num1 < num2);       // true
        System.out.println(num1 == num3);      // false
        System.out.println(num1.equals(num3)); // true

    }
}

열거체(Enumeration Type)

JDK 1.5부터 지원하는 문법으로, enum 키워드를 통해 선언한다.

장점

  1. 열거체 비교 시 값뿐만 아니라 타입도 체크한다.
  2. 열거체의 상숫값이 재정의되어도 다시 컴파일할 필요가 없다.

선언 및 사용

enum 키워드를 이용하여 선언한다.

enum 열거체이름 { 상수1이름, 상수2이름, ... }

enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }

(열거체 이름).(상수 이름)으로 사용한다.

Rainbow.RED

상숫값 설정

기본적으로 0부터 시작하여 1씩 증가되는 값으로 설정된다.
사용자가 불규칙한 값을 상수로 설정하고 싶은 경우 상수 이름 옆에 괄호를 만들어 안에 값을 넣어주면 된다. 그러나 이러한 경우 불규칙한 값을 설정하기 위한 필드와 메서드를 별도로 추가해야 한다.

enum Rainbow {
    RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), 
    INDIGO(-1), VIOLET(-11);

    private final int value;
    Rainbow(int value) { this.value = value; }
    public int getValue() { return value; }
}

Enum 클래스

java.lang 패키지의 클래스로, 모든 열거체의 조상 클래스이다.

values()

열거체의 모든 상수를 저장한 배열을 생성하여 반환한다.

enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }

public class Enum01 {
    public static void main(String[] args) {
        Rainbow[] arr = Rainbow.values();
        
        for (Rainbow rb : arr) {
            System.out.println(rb); // 상수 이름들 출력
        }
    }
}

valueOf()

전달된 문자열과 일치하는 이름을 가진 열거체의 상수를 반환한다.

enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }

public class Enum02 {
    public static void main(String[] args) {
        Rainbow rb = Rainbow.valueOf("GREEN");
        System.out.println(rb); // GREEN
    }
}

ordinal()

해당 열거체 상수가 정의된 순서(0부터 시작)를 반환한다.

enum Rainbow {
    RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), 
    INDIGO(-1), VIOLET(-11);
    
    private final int value;
    Rainbow(int value) { this.value = value; }
    public int getValue() { return value; }
}

public class Enum04 {
    public static void main(String[] args) {
        System.out.println(Rainbow.YELLOW.ordinal()); // 2
    }
}

그 외 메서드

http://tcpschool.com/java/java_api_enum 참조

Reference

http://tcpschool.com/java/java_api_wrapper
http://tcpschool.com/java/java_api_enum

좋은 웹페이지 즐겨찾기