Level 이넘

User 클래스에 사용자의 레벨을 저장할 필드를 추가하자.

정수형 상수 값으로 정의한 사용자 레벨

public class User{
  private static final int BASIC = 1;
  private static final int SILVER = 2;
  private static final int GOLD = 3;

  int level;

  public void setLevel(int level) {
    this.level = level;
  }
if (user1.getLevel() == User.BASIC) {
	user1.setLevel(User.SILVER);
}

문제는 level 타입이 int 이기 때문에 다른 종류의 정보를 넣는 실수를 해도 컴파일러가 체크하지 못한다.

⇒ 숫자 타입을 직접 사용하기보다 자바 5 이상에서 제공하는 이넘**enum** 을 이용하는게 편리하며 안전하다.

Level enum

public enum Level {

  BASIC(1), SILVER(2), GOLD(3);
  private final int value;
  Level(int value){ // DB 에 저장할 값을 넣어줄 생성자
    this.value = value;
  }
  
  public int intValue(){
    return value;
  }
  
  // 값으로부터 Level 타입 오브젝트를 가져오도록 만든 스태틱 메서드
  public static Level valueOf(int value){
    switch(value){
      case 1: return BASIC;
      case 2: return SILVER;
      case 3: return GOLD;
      default: throw new AssertionError("Unknown value: "+value);
    }
  }
}

Level enum

User 필드 추가