원지의 개발
article thumbnail
728x90

1. Enum

  • 관련된 상수들을 묶어 놓은 것
  • java에서는 타입이 안전한 열거형을 제공 - 컴파일 시간에 타입 체크를 받으므로, 이는 런타임 시에 발생하는 오류를 줄여줌

1.1. 정의, 사용

enum 열거형이름 { 상수명1, 상수명2, ... }
<java />
enum Direction { EAST, SOUTH, WEST, NORTH } class Unit { int x, y; //유닛의 위치 Direction dir; //열거형을 인스턴스 변수로 선언 void unit { dir = Direction.EAST; //유닛의 방향을 EAST로 초기화 } }

switch ~ case 사용

<java />
public enum Direction { BASKETBALL, SOCCER, BASEBALL, TENNIS, SWIMMING, MARATHON } Sports currnetSports = Sports.BASKETBALL; System.out.println(currentSports); //BASKETBALL //switch ~ case 사용 switch (currentSports) { case BASKETBALL : System.out.println("농구"); break; case BASEBALL : System.out.println("야구"); break; case TENNIS : System.out.println("테니스"); break; case SWIMMING : System.out.println("수영"); break; case MARATHON : System.out.println("마라톤"); break; }

1.1.1. 비교 - ==, compareTo()

<java />
if(dir == Direction.EAST) { x++; } else if(dir > Direction.WEST) { //에러, 비교 연산자는 사용 불가 ... } else if(dir.compareTo(Direction.WEST) > 0) { //compareTo() 는 사용 가능 ... }

1.2. java.lang.Enum

  • 모든 열거형은 Enum의 자손으며, 아래의 메서드를 상속 받음
메서드 설명
Class<E> getDeclaringClass() 열거형의 Class 객체 반환
String name() 열거형의 상수 이름을 문자열로 반환
int ordinal() 열거형 상수가 정의된 순서를 반환 (0부터)
T valueOf(Class<T> enum Type, String name) 지정된 열거형에서 name과 일치하는 열거형 상수를 반환
  • 컴파일러가 자동적으로 추가해주는 메서드도 있음
<java />
static E values() static E valueOf(String name) Direction d = Direction.valueOf("WEST");

1.3. 열거형에 멤버 추가

  • 데이터들 간의 연관 관계 표현 - 같은 의미를 갖지만 표시 형식이 다를 경우에 사용 (우아한 형제들 참고)
  • 상태와 행위를 한곳에서 관리
  • 데이터 그룹 관리 - 열거형에서 열거형 사용 가능
  • 관리 주체를 DB에서 객체로 변경
<java />
emum Direction { //괄호 안에 원하는 값을 추가 EAST(1, "E"), SOUTH(5, "S"), WEST(-1, "W"), NORTH(10, "N"); //끝에 ;를 추가 해야함 //정수를 저장할 필드(인스턴스 변수)를 추가 private final int value; private final String initial; //생성자를 추가 Direction(int value, String initial) { this.value = value; this.initial = initial; } //get 메서드 추가 (lombok의 @getter 사용가능) public int getValue() { return value; } public String getInitial() { return initial; } }
  • 불연속적인 열거형 상속의 경우, 원하는 값을 () 안에 넣음 - 끝에 ; 추가
  • ()를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야함
  • 열거형의 생성자는 묵시적으로 private이므로, 외부에서 객체 생성 불가

 

참고 - 열거형에 멤버 추가해서 사용, 

https://techblog.woowahan.com/2527/

 

Java Enum 활용기 | 우아한형제들 기술블로그

{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E

techblog.woowahan.com

728x90
profile

원지의 개발

@원지다

250x250