< 김영한의 실전 자바 - 중급편 > 강의를 보고 이해한 내용을 바탕으로 합니다.
열거형이 생겨난 이유는 무엇일까?
예를 들어 문자열을 사용한다면
=> 이러한 문제를 해결하기 위해서는 특정 범위로 값을 제한해야 한다.
예를 들어 BASIC, GOLD, DIAMOND 라는 정확한 문자만 메서드에 전달되어야 한다.
하지만 String은 어떤 문자열이든 받을 수 있기 때문에 자바 문법 관점에서는 아무런 문제가 없게된다.
문자열이 아닌 상수를 사용한다면? public static final String BASIC = "BASIC"
상수는 미리 정의한 변수명을 사용하므로 문자열을 직접 사용하는 것보다 안전하다.
하지만 문자열 상수를 사용해도 근본적으로 문제를 해결할 수는 없다.
왜냐하면, String 타입은 어떤 문자열이든 입력할 수 있기 때문에 어떤 개발자가 실수로 해당 클래스에 있는 문자열 상수를 사용하지 않고 직접 문자열을 사용해도 막을 수 있는 방법이 없기 때문이다.
자바는 타입 안전 열거형 패턴을 매우 편리하게 사용할 수 있는 열거형(Enum Type)을 제공한다.
Enumeration은 일련의 명명된 상수들의 집합을 정의하는 것을 의미하며, 프로그래밍에서는 이러한 상수들을 사용하여 코드 내에서 미리 정의된 값들의 집합을 나타낸다.
=> 자바의 enum은 타입 안정성을 제공하고 코드의 가독성을 높이며 예상 가능한 값들의 집합을 표현하는데 사용된다.
public enum Grade {
BASIC, GOLD, DIAMOND
}
모든 열거형은 java.lang.Enum 클래스를 자동으로 상속받는다.
추가로 다른 클래스를 상속 받을 수 없다.
인터페이스를 구현할 수 있다.
public enum Grade {
BASIC(10), GOLD(20), DIAMOND(30);
private final int discountPercent;
Grade(int discountPercent) {
this.discountPercent = discountPercent;
}
public int getDiscountPercent() {
return discountPercent;
}
//추가
public int discount(int price) {
return price * discountPercent / 100;
}
}