백기선 자바 라이브 스터디 11: 열거형

Hoyoung Jung·2021년 1월 30일
0

enum

  • 열거형
  • C 언어에도 있었던 그것 (동작은 조금 다르다)
  • 관련된 상수들을 같이 묶어 놓은 것
  • type-safe
class Chess {
	enum Color {WHITE, BLACK}
}

enum 정의 및 선언, 사용법

정의

enum Enum이름 { 상수1, 상수 2, ... }

enum Color {WHITE, BLACK, NONE}

사용

Color color = Color.WHITE;
if (color == Color.BLACK) {
//...
}

클래스 내 enum 선언

  • 보통의 클래스와 달리 public으로 선언 가능
  • 사용하다 보면 enum에 해당하는 값이 필요한 경우가 종종 생기는데 아래처럼 사용하는 경우가 많았다.
  • enum의 생성자는 private이므로 주의하자
public class Chess {
    public enum Color {
        WHITE("white"), BLACK("black");

        private String value;

        Color(String color) {
            this.value = color;
        }

        public String getValue() {
            return this.value;
        }
    }

    private Color color;

    public Chess(Color color) {
        this.color = color;
        System.out.println(color.getValue());
    }
}

enum이 제공하는 메소드

java.lang.Enum

Enum method

Class<E> getDeclaringClass()
String name()
int ordinal() 
T valueOf(Class<T> enumtype, String name)

valueOf

  • 이름으로 enum을 얻어 올 수 있다.
  • 유용하게 잘 사용된다.
    public static void main(String[] args) {
        Color w = Color.valueOf("WHITE");
        System.out.println(w.getValue());
    }

결과: white

values

  • 해당 enum 타입들 전체의 배열을 얻어올 수 있다.
  • 역시 매우 유용
Color[] colors = Color.values() //전체가 다 들어옴

ordinal()

  • 해당 enum의 순번이 나온다.
private Color[] colors = Color.values()
public Color next() {
	return color[(this.ordinal()  + 1) % colors.length];
}
  • Color.WHITE.next() 하면 BLACK이 나온다.

EnumSet

  • https://www.baeldung.com/java-enumset 에 활용법이 나와 있다.
  • "Enum을 Set으로 쓰고 싶다면 EnumSet이 좋다." 라고 하는데 아직 써 본 적이 없다. 글 출간하고 나서 하트글 읽고 오늘 방송에서 배워고 다시 추가로 정리하자.
profile
주짓수를 좋아하는 개발자

2개의 댓글

comment-user-thumbnail
2021년 1월 30일

enum 잘 안쓰게 되는데 한번 써봐야겠습니다.

참 그리고, 본문에 오타 있는 것 같습니다!
private Color[] colors = Color.values()
public COlor next() {

1개의 답글