ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 11주차 과제 : 자바의 열거형
    Java/온라인 자바 스터디 2021. 1. 24. 15:52
    반응형

    목표

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


    학습할 것 (필수)

    enum 정의하는 방법

    enum이 제공하는 메소드 (values()와 valueOf())

    java.lang.Enum

    EnumSet


    enum 정의하는 방법

    자바에서는 enum 키워드를 사용하여 열거체를 정의할 수 있다.


    문법

    enum 열거체이름 {상수1이름, 상수2이름, ...}

    예제

    enum Rainbow {RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET}


    사용

    열거체이름.상수이름

    예제

    Rainbow.RED


    열거체의 상수 값 정의 및 추가

    정의된 열거체의 첫 번째 상수 값은 0부터 설정되며, 그 다음은 바로 앞의 상수 값보다 1만큼 증가되면 설정된다. 또한, 불규칙한 값을 상수 값으로 설정하고 싶으면 상수의 이름 옆에 괄호(())을 추가하고, 그 안에 원하는 상수 값을 명시할 수 있다. 하지만 이때에는 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 다음과 같이 별도로 추가해야한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package enum01;
     
    public enum Rainbow {
     
        RED(-7), ORANGE(-5), YELLOW(-3), GREEN(1), BLUE(3), INDIGO(5), VIOLET(7);
     
        private final int value;
     
        Rainbow(int value) {
            this.value = value;
        }
     
        public int getValue() {
            return value;
        }
    }
    cs


    enum이 제공하는 메소드 (values()와 valueOf())

    values()

    values() 메소드는 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환한다. values() 메소드는 자바의 모든 열거체에 컴파일러가 자동으로 추가해 주는 메소드이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package enum01;
     
    enum Rainbow {
        RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET;
    }
     
    public class EnumValues {
     
        public static void main(String[] args) {
     
            Rainbow[] rainbowArray = Rainbow.values();
     
            for (Rainbow rainbow : rainbowArray) {
                System.out.println(rainbow);
            }
        }
    }
    cs


    valueOf()

    valueOf() 메서드는 전달된 문자열과 일치하는 해당 열거체의 상수를 반환한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package enum01;
     
    enum Rainbow {
        RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET;
    }
     
    public class EnumValueOf {
     
        public static void main(String[] args) {
     
            Rainbow rainbow = Rainbow.valueOf("GREEN");
     
            System.out.println(rainbow);        
        }
    }
    cs


    ordinal()

    ordinal() 메소드는 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환한다. 이때 반환되는 값은 열거체 정의에서 해당 열거체 상수가 정의된 순서이며, 상수 값 자체가 아님을 명심해야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package enum01;
     
    enum Rainbow {
        RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET;
    }
     
    public class EnumOrdinal {
     
        public static void main(String[] args) {
     
             int idx = Rainbow.GREEN.ordinal();
     
             System.out.println(idx);
        }
    }
    cs


    java.lang.Enum 클래스

    Enum 클래스는 모든 자바 열거체의 공통된 조상 클래스이다. Enum 클래스에는 열거체를 조작하기 위한 다양한 메소드가 포함되어 있다.


    대표적인 Enum 메소드

    메서드 

    설명 

     static E values()

     해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환한다.

     static E valueOf(String name)

     전달된 문자열과 일치하는 해당 열거체의 상수를 반환한다.

     protected void finalize()

     해당 Enum 클래스가 final 메소드를 가질 수 없다.

     String name()

     해당 열거체 상수의 이름을 반환한다.

     int ordinal()

     해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환한다.


    EnumSet

    EnumSet은 다른 컬렉션들과 다르게 new 연산자 사용이 불가능하며, 정적 팩토리 메소드(static factory method)만으로 EnumSet의 구현 객체를 반환받을 수 있다.


    EnumSet 사용법

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package enum01;
     
    import java.util.EnumSet;
     
    enum RainBow_example {
        RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET;
    }
     
    public class EnumSetExample {
     
        public static void main(String[] args){
            
            EnumSet<Rainbow> enumSet = EnumSet.allOf(Rainbow.class);
            
            System.out.println("Rainbow : " + enumSet);
        }    
    }
    cs


    참조 : https://github.com/whiteship/live-study/issues/11

    반응형

    댓글

Designed by Tistory.