원지의 개발
article thumbnail
728x90

Enum

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

정의, 사용

enum 열거형이름 { 상수명1, 상수명2, ... }
enum Direction {
	EAST,
    SOUTH,
    WEST,
    NORTH
}

class Unit {
	int x, y; //유닛의 위치
    Direction dir; //열거형을 인스턴스 변수로 선언
    
    void unit {
    	dir = Direction.EAST; //유닛의 방향을 EAST로 초기화
    }
}

switch ~ case 사용

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;
}

비교 - ==, compareTo()

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

java.lang.Enum

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

Direction d = Direction.valueOf("WEST");

열거형에 멤버 추가

  • 데이터들 간의 연관 관계 표현 - 같은 의미를 갖지만 표시 형식이 다를 경우에 사용 (우아한 형제들 참고)
  • 상태와 행위를 한곳에서 관리
  • 데이터 그룹 관리 - 열거형에서 열거형 사용 가능
  • 관리 주체를 DB에서 객체로 변경
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