Java Enum 기본 사항

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 의 열거형 (enum) 에 대해 배우게 됩니다. 열거형은 Java 에서 고정된 상수 집합을 정의할 수 있도록 해주는 특수한 데이터 유형입니다. Java 에서 열거형을 생성, 사용 및 조작하는 방법을 배우게 됩니다.

Enum 생성하기

  1. ~/project 디렉토리에서 StudentResult.java라는 이름의 새 파일을 생성합니다.
  2. StudentResult라는 이름의 열거형을 생성하기 위해 다음 코드를 추가합니다.
public enum StudentResult {
    PASS,
    FAIL,
    ABSENT
}

Enum 사용하기

  1. ~/project 디렉토리에서 Demo.java라는 이름의 새 파일을 생성합니다.
  2. StudentResult 열거형 타입의 변수를 생성하고 해당 값을 사용하기 위해 다음 코드를 추가합니다.
public class Demo {
    public static void main(String[] args) {
        StudentResult result1 = StudentResult.ABSENT;
        StudentResult result2 = StudentResult.FAIL;
        StudentResult result3 = StudentResult.PASS;

        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
    }
}
  1. 터미널에서 다음 명령을 사용하여 코드를 실행합니다.
javac Demo.java && java Demo

If-Else 문과 함께 Enum 사용하기

  1. StudentResult 열거형을 if-else 문과 함께 사용하기 위해 다음 코드를 추가합니다.
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        if(result == StudentResult.ABSENT)
            System.out.println("The student was absent for the exam.");

        else if(result == StudentResult.PASS)
            System.out.println("The student passed the exam.");

        else if(result == StudentResult.FAIL)
            System.out.println("The student failed the exam.");
    }
}

Switch 문과 함께 Enum 사용하기

  1. StudentResult 열거형을 switch 문과 함께 사용하기 위해 다음 코드를 추가합니다.
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        switch(result) {
            case ABSENT : System.out.println("The Student was absent for the exam.");
            break;

            case PASS : System.out.println("The Student passed the exam.");
            break;

            case FAIL : System.out.println("The Student failed the exam.");
            break;
        }
    }
}

Enum 순회하기 (반복)

  1. StudentResult 열거형을 반복 처리하기 위해 다음 코드를 추가합니다.
public class Demo {
    public static void main(String[] args) {
        StudentResult[] resultArr = StudentResult.values();

        for(StudentResult sr : resultArr) {
            System.out.println(sr + " at index " + sr.ordinal());
        }
    }
}

Enum 의 toString() 메서드 사용법

  1. 열거형의 toString() 메서드를 사용하기 위해 다음 코드를 추가합니다.
public class Demo {
    public static void main(String[] args) {
        for(StudentResult sr : StudentResult.values()) {
            String resultStr = sr.toString();
            System.out.println("Uppercase: " + resultStr);
            System.out.println("Lowercase: " + resultStr.toLowerCase());
            System.out.println();
        }
    }
}

문자열로부터 Enum 생성하기

  1. 문자열로부터 열거형을 생성하기 위해 다음 코드를 추가합니다.
public class Demo {
    public static void main(String[] args) {
        String resultStr = "FAIL";
        StudentResult result = StudentResult.valueOf(resultStr);
        System.out.print("Enum from String: " + result);
    }
}
  1. 터미널에서 다음 명령을 사용하여 코드를 실행합니다.
javac Demo.java && java Demo

클래스 내에서 Enum 생성하기

  1. 클래스 내에서 열거형을 생성하고 사용하기 위해 다음 코드를 추가합니다.
public class Student {
    String name;
    StudentResult result;

    // Defining an enum type
    enum StudentResult {
        PASS,
        FAIL,
        ABSENT;
    }

    // Constructor
    Student(String s, StudentResult sr) {
        name = s;
        result = sr;
    }

    // Enum if-else method
    public void printResult() {
        if (this.result == StudentResult.ABSENT)
            System.out.println(this.name + " was absent for the exam.");

        else if (this.result == StudentResult.PASS)
            System.out.println(this.name + " passed the exam.");

        else
            System.out.println(this.name + " failed the exam.");
    }

    // Enum method
    public boolean wasAbsent() {
        if (this.result == StudentResult.ABSENT)
            return true;
        else
            return false;
    }

    // Main method
    public static void main(String[] args) {
        Student s1 = new Student("Justin", StudentResult.ABSENT);
        Student s2 = new Student("Jessica", StudentResult.PASS);

        s1.printResult();
        s2.printResult();

        System.out.println("Student s1 was absent: " + s1.wasAbsent());
    }
}
  1. 터미널에서 다음 명령을 사용하여 코드를 실행합니다.
javac Student.java && javac Demo.java && java Student

EnumSet 사용하기

  1. EnumSet 을 사용하기 위해 다음 코드를 추가합니다.
import java.util.EnumSet;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumSet<StudentResult> resultSet1 = EnumSet.of(StudentResult.FAIL, StudentResult.PASS);
        EnumSet<StudentResult> resultSet2 = EnumSet.allOf(StudentResult.class);

        System.out.println("Enum Set-1: " + resultSet1);
        System.out.print("Enum Set-2: " + resultSet2);
    }
}

EnumMap 사용법

  1. EnumMap 을 사용하기 위해 다음 코드를 추가합니다.
import java.util.EnumMap;
import java.util.Map;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumMap<StudentResult, String> resultMap = new EnumMap<>(StudentResult.class);
        resultMap.put(StudentResult.PASS, "Student Passed the exam");
        resultMap.put(StudentResult.FAIL, "Student Failed the exam");
        resultMap.put(StudentResult.ABSENT, "Student was absent for the exam");

        for (Map.Entry<StudentResult, String> e : resultMap.entrySet())
            System.out.println(e.getKey() + " --> " + e.getValue());
    }
}

요약

이 랩에서는 enum 을 생성하고, if-else 및 switch 문과 함께 사용하며, enum 을 반복하고, toString() 메서드를 사용하고, 문자열에서 enum 을 생성하고, 클래스 내부에 enum 을 생성하고, EnumSet 을 사용하여 enum 상수를 효율적으로 저장하고, EnumMaps 를 사용하여 enum 의 키 - 값 쌍을 저장하고, enum 에서 구체적 (concrete) 및 추상 (abstract) 메서드를 사용하는 방법을 배웠습니다. 또한 enum 이 상수 값의 컬렉션을 정의하는 데 사용되며 Java 에서 타입 안전성 (type safety) 을 높인다는 것을 배웠습니다.