오늘은 자바 열거형(enums)에 대해서 글을 써보겠습니다.
남궁 성님의 "Java의 정석"이라는 책을 참고했습니다.
글 내용 중 오류나 수정 사항이 있으면 댓글로 남겨주시면 감사드리겠습니다.
1. 열거형이란?
같은 타입의 객체들을 나열하는 것이라고 보면 될 것 같습니다.
열거형은 선언된 순서에 따라 0부터 인덱스 값을 갖게 됩니다. (따로 열거형 인덱스 값을 지정해줄 수도 있습니다. 이 부분은 뒷부분에서 다루도록 하겠습니다.)
2. 열거형 선언
enum 열거형이름 { 상수명 1, 상수명 2, ... }
//예시
enum Value { TWO, THREE, FOUR }
//변수 참조
Value.TWO
Value.THREE
Value.FOUR
주어진 예시에서 쓰인 TWO, THREE, FOUR은 Value 객체로 선언이 되었습니다.
3. 열거형 멤버 추가
//예시
enum Direction{
EAST(1), SOUTH(5), WEST(-1), NORTH(10);
private final int value;
Direction(int value); // line 3처럼 값을 지정해주기 위해서는 이러한 생성자를 작성해주어야 합니다.
public int getValue(){ return value; }
}
여기서 주의해야할 부분은 열거형 상수를 선언하는 부분입니다.
앞서 "2. 열거형 선언" 파트에서 언급했던 예시에서는 열거형을 선언할 때 뒤에 세미 콜론(;)을 붙이지 않았습니다.
하지만 열거형 상수의 값을 지정할 때에는 뒤에 세미 콜론(;)을 붙여야한다는 점을 기억해야 합니다.
열거형 상수의 값을 지정할 때 생성자를 어떻게 작성하느냐에 따라서 하나의 열거형 상수에 여러 값을 지정할 수도 있습니다.
enum Direction{
EAST(1, ">"), SOUTH(2, "V"), WEST(3, ">"), NORTH(4, "^");
private final int value;
private final String symbol;
Direction(int value, String symbol){
this.value=value;
this.symbol=symbol;
}
public int getValue(){ return value; }
public String getSymbol() { return symbol; }
}
또한 열거형에 추상 메서드를 추가하여 각 상수에서 이를 구현할 수도 있습니다.
enum Transportation{
BUS(100){ int fare(int distance) { return distance*BASIC_FARE; }},
TRAIN(150){ int fare(int distance) { return distance*BASIC_FARE; }};
protected int BASIC_FARE; // 각 열거형 상수에서 접근할 수 있도록 private이 아니라 protected를 사용
abstract int fare(int distance);
Transportation(int basicFare){ BASIC_FARE=basicFare; }
public int getBasicFare() { return BASIC_FARE; }
}
'컴퓨터 언어 > JAVA' 카테고리의 다른 글
[JAVA] 쓰레드(Thread) (1) (0) | 2020.06.17 |
---|---|
[JAVA] 애너테이션(Annotation) (0) | 2020.06.14 |
[JAVA] 지네릭스(Generics) (0) | 2020.06.11 |
[JAVA] 현재 날짜, 시간 구하기 (0) | 2020.06.08 |
[JAVA] interface(인터페이스) (0) | 2020.06.08 |