개발 & 방법론/Java

11주차 과제 : enum

loop-study 2021. 2. 18. 18:02
 

11주차 과제: Enum · Issue #11 · whiteship/live-study

목표 자바의 열거형에 대해 학습하세요. 학습할 것 (필수) enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet 마감일시 2021년 1월 30일 토요일 오후 1시까지.

github.com

목표

자바의 열거형에 대해 학습하세요.

학습할 것 (필수)

  • enum 정의하는 방법
  • enum이 제공하는 메소드 (values()와 valueOf())
  • java.lang.Enum
  • EnumSet

 

enum 정의하는 방법

Enum 는 열거형 혹은 상수집합으로 부른다

class 대신 enum 으로 정의한다

 

정의 방법은 3가지로 나눠진다

// 1. java 파일로 정의
public enum DevList {
    JAVA,
    SPRING,
    RDBMS,
    JPA
}
public class EnumStudyMain {

    // 2. 클래스안에 선언
    enum MonsterType {UNDEAD, BEAST, ELEMENTAL}

    public static void main(String[] args) {
        ....
    }
}
// 3. 클래스밖에 선언
enum MonsterType {UNDEAD, BEAST, ELEMETAL}

public class EnumStudyMain {
    ....
}

enum 은 기본적으로 static, final 이 내장되어있다

 

사용 방법은 다음과 같다

public class EnumStudyMain {

    public static void main(String[] args) {
        System.out.println(DevList.SPRING);

        DevList devList = DevList.JAVA;
        System.out.println(DevList.JAVA);
    }
}

곧바로 사용하거나 변수에 할당해서 사용한다

 

 

enum이 제공하는 메소드

values() : 정의된 상수 배열을 반환

    public static void main(String[] args) {

        // values()
        System.out.println(DevList.values());

        for (DevList dev : DevList.values()) {
            System.out.println(dev);
        }
    }

 

valueOf(Class<T> enumType, String name) : 지정된 열거형에서 name과 일치하는 상수를 반환, 일치한게 없으면 에러가 발생한다

    public static void main(String[] args) {

        // valueOf()
        System.out.println(DevList.valueOf("JAVA"));
        System.out.println(DevList.valueOf("JAVA2"));
    }

 

ordinal() : 상수의 정의된 순서를 반환

    public static void main(String[] args) {
        for (DevList dev : DevList.values()) {
            System.out.println(dev + " = " + dev.ordinal());
        }
    }

 

name() : 상수의 이름을 반환

    public static void main(String[] args) {
        for (DevList dev : DevList.values()) {
            System.out.println(dev.name());
        }
    }

 

 

java.lang.Enum

모든 열거형은 java.lang.Enum 클래스를 상속받는다

컴파일러가 자동으로 호출하니 개발자는 건들 수가 없다

 

 

 

EnumSet

열거형을 위해 구현된 Set 인터페이스이며 다음과 같은 특징을 가진다

  • EnumSet은 모두 동일한 열거형 상수만 포함한다
  • Null 을 가질 수 없다
  • Enum 순서대로 저장된다
  • thread-safe 하지 않아서 외부에서 동기화해야한다

https://www.baeldung.com/java-enumset