Enum의 정의 및 Enum을 언제 사용하는지, 사용법에 대한 내용을 정리하기 위한 포스트입니다.
관련이 있는 상수들의 집합으로, 클래스를 상수처럼 사용할 수 있다.
enum 클래스로 구현할 경우 상수 값과 같이 유일하게 하나의 인스턴스가 생성되어 사용된다.
개발중인 도메인에서 공통적으로 사용하는 상수들이 있고 각 클래스 마다 중복 되어 사용 될때,
서로 관련 있는 상수 값들을 모아 enum으로 구현할 경우 유용하다.
ex) 계산기의 사칙연산 기호(+, -, *), 배달 서비스의 현재 주문 상태(결제 완료,결제 대기)
values()
Enum의 모든 인스턴스들을 배열에 담아 리턴한다.
(보통 순회하며 인스턴스를 비교할때 유용하다.)
valueOf()
Enum의 인스턴스중 파라미터로 넘어온 값과 동일한 값이 있는지 비교하여 인스턴스를 반환한다.
ex) MathSymbol.valueOf(PLUS) // <- PLUS
를 찾고 있으면 PLUS
인스턴스 반환
ordinal()
Enum 클래스 내부에 있는 상수들의 Index 를 리턴하는 메소드이다.
(Index는 선언한 순서에 따라 결정된다. 아래 예시코드에서 PLUS
= 0, DIVIDE
= 2)
PLUS("+")
, MINUS("-")
, DIVIDE("/")
, MULTIPLE("*")
총 4개의 상수가 선언되었으며
상수의 값으로 기호(+, -, *, /)를 가진다.
Enum도 클래스이기 때문에 생성자를 선언 해야한다
MathSymbol(String mathSymbol) {
this.mathSymbol = mathSymbol;
}
findBalidatedSymbol()
은 Enum에서 파라미터 operator
와 동일한 상수를 찾아 반환하는 코드이다.
operate()
는 Enum의 상수에 따라 각기 다른 계산 결과를 반환한다.
ex) findBalidatedSymbol("+").operate(1,2)
를 실행하면 3이 반환될 것이다.
예시1
의 코드에서 operate
는 조건절을 진행하며 각기 다른 계산 식을 리턴하는 형태였다면에시2
의 operate
는 각각의 상수에서 오버라이딩 되어 각각 다른 식을 리턴하고 있다.