티스토리 뷰

프로그래밍 언어/Java

열거형

빵파레2 2019. 6. 20. 21:14

1. 열거형이란?


자바에서 상수를 표현할때 사용하는 방식이다.

enum을 사용하면 상수라는 것을 명확히 표현할 수 있고 코드의 가독성이 증가 한다.

자신만의 네임스페이스를 갖고 있으며 형 안정성을 보장 해준다.

또한, 원시 데이터 타입인 int와 char과 같이 switch 문에서 사용이 가능 하다.

열거형의 장점
1. 열거형를 비교할 때 실제 값뿐만 아니라 타입까지도 체크합니다.
2. 열거형의 상숫값이 재정의되더라도 다시 컴파일할 필요가 없습니다.

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

열거형에 정의된 상수를 사용하는 방법은 '열거형이름.상수명' 이다. (클래스의 static 변수를 참조하는 방법과 동일하다.)

열거형 상수간의 비교에는 '=='를 사용할 수 있다. equals()가 아닌 '=='로 비교가 가능하다는 것은 그만큼 빠른 성능을 제공한다는 얘기이다.

하지만 '<', '>'와 같은 비교연산자는 사용할 수 없고 compareTo()는 사용가능하다.

 

모든 열거형의 조상은 'java.lang.Enum' 클래스 이다.

 

 

2. 열거형에 멤버추가하기



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

위와 같이 정의된 열거체의 첫 번째 상숫값은 0부터 설정되며, 그다음은 바로 앞의 상숫값보다 1만큼 증가되며 설정된다.


enum Rainbow {

    RED("red"), ORANGE("orange"), YELLOW("yellow"), GREEN("green"), BLUE("blue"), INDIGO("indigo"), 
    VIOLET("violet");



    private final int value;

    Rainbow(int value) { this.value = value; }

    public int getValue() { return value; }

}

또한, 불규칙한 값을 상숫값으로 설정하고 싶으면 상수의 이름 옆에 괄호(())을 추가하고, 그 안에 원하는 상숫값을 명시할 수 있다.

하지만 이때에는 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수생성자를 위의 예제와 같이 별도로 추가해야만 한다.

열거형의 생성자는 제어자가 묵시적으로 private 이다.

(즉, 외부에서 new 연산자를 통해 객체를 생성할 수 없다.)

 

필요하다면, 하나의 열거형 상수에 여러 값을 지정할 수도 있다. 다만 그에 맞게 인스턴스 변수와 생성자 등을 새로 추가해주어야 한다.


enum Direction {
   EAST(1, ">"), SOUTH(2, "V"), WEST(3, "<"), NORTH(4, "^");
   
   private final int value;
   private final String symbol;
   
   Direction(int value, String symbol) {   // 접근제어자 private 생략
      this.value = value;
      this.symbol = symbol;
   }
}

 

열거형에 추상메서드 추가하기

열거형에 추상메서드를 선언하면 각 열거형 상수가 해당 추상 메서드를 반드시 구현해야 한다.

 

대표적인 Enum 클래스의 메서드

 

 

참고자료


남궁 성 지음, 자바의 정석, 도우출판

http://tcpschool.com/java/java_api_enum

'프로그래밍 언어 > Java' 카테고리의 다른 글

스트림 API  (0) 2019.06.24
람다식(Lambda expression)  (0) 2019.06.23
제네릭스  (0) 2019.06.20
컬렉션 프레임워크  (0) 2019.06.18
java.lang 패키지  (0) 2019.06.17