-
[JAVA] EnumsProgramming🧑💻/Java 2022. 10. 8. 22:52
Enums
보통의 변수는 어떠한 연산이나 논리 관계 속에서 역할은 정해져 있지만 가질 수 있는 값은 입력에 따라 정해지기 때문에 특정할 수 없다.
예를 들어 피타고라스 정리($a^2+b^2 = c^2$) a, b, c는 밑변, 높이, 빗변으로 표현되지만 가질 수 있는 값은 한정할 수 없다.
하지만 월요일 부터 일요일까지 존재하는 요일은 요일이라는 변수에 값의 범위가 정해져 있다.
이처럼 가질 수 있는 값의 범위가 한정된 경우에는 변수가 가질 수 있는 값을 상수의 집합으로 묶음으로써 코드를 명료하게 할 수 있다.
* 어떠한 변수 이름을 갖는 객체가 가질 수 있는 값(인스턴스들)이 한정되어 있는 경우 인스턴스들을 그룹화 하여 객체가 지시할 수 있는 인스턴스들을 제한한다.
Enums 정의하기
public enum State { // State 객체가 가질 수 있는 인스턴스들(인스턴스의 속성 값) PLAY("Game not finished"), DRAW("Draw"), WIN_X("X wins"), WIN_O("O wins"); // State enum 들의 속성 private final String msg; // enum 속성을 부여할 constructor State(String msg) { this.msg = msg; } // enum 객체의 속성을 가져오는 getMethod public String getMsg() { return msg; } }
Enums 이용하기
public enum UserStatus { PENDING, ACTIVE, BLOCKED }
위와 같이 enum을 정의하였을 때 이를 이용해 객체를 만들면 아래와 같이 나타난다.
UserStatus active = UserStatus.ACTIVE;
만들어진 객체는 name( ) method를 이용하여 값을 얻을 수 있다.
System.out.println(active.name()); // ACTIVE
또한 valueOf( ) method를 이용해서도 객체를 만들 수 있다.
UserStatus blocked = UserStatus.valueOf("BLOCKED"); // BLOCKED
enum의 모든 값을 배열에 넣을 때는 values( ) method를 이용한다.
UserStatus[] statuses = UserStatus.values(); // [PENDING, ACTIVE, BLOCKED]
ordinal( ) method를 이용하면 enums 안에서 값의 순서를 알 수 있다.
System.out.println(active.ordinal()); // 1 (starting with 0) System.out.println(UserStatus.BLOCKED.ordinal()); // 2
enum이 참조형이긴 하지만 equals와 == 를 모두 사용하여 값을 비교할 수 있다.
System.out.println(active.equals(UserStatus.ACTIVE)); // true System.out.println(active == UserStatus.ACTIVE); // true
switch에서 사용하기
UserStatus status = ... // some status switch (status) { case PENDING: System.out.println("You need to wait a little."); break; case ACTIVE: System.out.println("No problems, you may pass here."); break; case BLOCKED: System.out.println("Stop! You can't pass here."); break; default: System.out.println("Unsupported enum constant."); }
반복문에서 사용하기
for (UserStatus status : UserStatus.values()) { System.out.println(status); }
배열 값들을 모두 순회하는 것과 같이 values method를 이용하여 위처럼 반복문에서 활용이 가능하다.
'Programming🧑💻 > Java' 카테고리의 다른 글
[JAVA] 컴퓨터와 자바 메모리에 대한 이해 (0) 2023.03.07 [JAVA] String Constant Pool은 무엇일까? (0) 2022.12.17 [JAVA] final (0) 2022.10.25 [JAVA] static (0) 2022.10.21 [JAVA] data type : 원시형과 참조형의 차이 (0) 2022.09.28