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 |
댓글