본문 바로가기
컴퓨터 언어/JAVA

[JAVA] 열거형(enums)

by 테크케찰 2020. 6. 14.

오늘은 자바 열거형(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