JAVA

Enum class

whyWhale 2021. 5. 17.

Enum 클래스란


  • Enum이라는 것은 열거형이라는 뜻이다.
  • 서로 연관되거나 또는 관련이 있는 상수들의 집합을 의미한다.
  • JDK 1.5부터 사용할 수 있다. 
    • 이전 까지만 해도 final static 과 같은 방식으로 상수를 정의하였다.
    • 클래스 내부에 상수를 정의하므로써 상수의 개수가 많아지면서 네임 충돌이 발생, 가독성이 떨어지게 된다.

 

 

Enum 클래스를 사용하는 이유


  • 코드가 간략해지며 가독성이 높아진다.
  • 인스턴스 생성과 함께 상속을 방지하여 타입 안전성이 보장된다.
    • Enum클래스의 각 상수들을 고정된 타입으로서 다른 패키지 또는 클래스에서 변경하지 못한다.
    • 이를 위해 생성자의 접근 제어자를 Private로 설정해야 하며 타입은 final과 같은 성격을 뛴다.
    • 실질적으로 클라이언트에서 Enum 클래스의 인스턴스 생성이 불가하며 상속도 받을 수 없게 됩니다.
  • 키워드 Enum을 사용하기에 구현 의도가 명확해진다.

 

 

 

💻CODE


 

[Enum class]

public enum Grade {
    FIRST_GRADE(1, 2020),
    SECOND_GRADE(2, 2019),
    THIRD_GRADE(3, 2018);

    private int grade;
    private int entranceYear;

    Grade(int grade, int entranceYear) {
        this.grade = grade;
        this.entranceYear = entranceYear;
    }

    public int getGrade() {
        return grade;
    }
    public int getEntranceYear() {
        return entranceYear;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
    public void setEntranceYear(int entranceYear) {
        this.entranceYear = entranceYear;
    }
}

이 과정에서 Grade 클래스의 매개변수 생성자는 외부에서는 접근하지 못하며 Grade 클래스 안에 위치한 각 상수들만이 이를 접근할 수 있습니다. 즉 Private 접근 제어자입니다.

 

[Student Class]

public class Student {
    String name;
    int grade;
    int entranceYear;

    public static void main(String[] args) {
        Student student = new Student();
        student.name = "KJB";

        Grade grade = Grade.SECOND_GRADE;
        student.grade = grade.getGrade();
        student.entranceYear = grade.getEntranceYear();

        System.out.println(student.entranceYear + "년에 입학한 " +  
        				   student.name + " 학생은 현재 " + 
        				   student.grade + "학년입니다.");
    }
}

grade와 entranceYear 변수의 값은 앞에서 구현한 Grade 클래스의 특정 상수를 호출하여 그 상수에 해당하는 멤버 변수의 Getter 메소드를 호출하여 데이터를 불러오고 있습니다. 그 이유는 외부에서 Enum 클래스를 인스턴스화 할 수 없기 때문입니다.

'JAVA' 카테고리의 다른 글

동시성  (0) 2021.05.31
Blocking , NonBolocking  (0) 2021.05.23
인터페이스, 추상클래스  (0) 2021.05.16
static  (0) 2021.05.04
가비지 콜렉터의 종류  (0) 2021.05.03

댓글