개발/Java
[Java] Enum 설계하기
suniverse
2023. 2. 22. 12:47
Enum을 활용하여
✍ 대륙명을 열거타입으로 설계하기
enum Continent { // 대륙명을 열거하는 enum
EUROPE("유럽", new Country[] {Country.FRANCE, Country.GERMANY, Country.SPAIN}),
ASIA("아시아", new Country[] {Country.KOREA, Country.HONGKONG, Country.TAIWAN}),
AMERICA("아메리카", new Country[] {Country.USA, Country.CANADA}),
EMPTY("잘못된 접근", new Country[] {});
String title; // 대륙명
Country[] countryArr; // 국가명 배열
private Continent(String title, Country[] countryArr) { // 생성자
this.title = title;
this.countryArr = countryArr;
}
}
✍ 국가명을 열거타입으로 설계하기
enum Country {
// ---EUROPE
FRANCE("프랑스", "33", "FR"),
GERMANY("독일", "49", "DE"),
SPAIN("스페인", "34", "ES"),
// ASIA
KOREA("대한민국", "82", "KR"),
HONGKONG("홍콩", "852", "HK"),
TAIWAN("대만", "886", "TW"),
//AMERICA
USA("미국", "01", "US"),
CANADA("미국", "01", "CA");
String title; // 국가명
String number; // 국가번호
String code; // 국가코드
private Country(String title, String number, String code) { // 생성자
this.title = title;
this.number = number;
this.code = code;
}
}
=> Continent와 Country 모두 enum에 속성을 추가하였다. Enum 클래스에는 기본적으로 제공되는 ordinal이 있다.
하지만 이것 만으로는 한계가 있다.
예를 들어 각 국가에는 국가번호와 국가코드가 존재하고, 각 대륙에는 수많은 국가들이 존재한다.
이를 관리하기 위해서는 enum에 속성을 추가해주어야 한다.
ex) 또다른 예
naver, google과 같은 사이트들은 고유의 url을 가지고 있다. 이는 Enum 클래스에서 기본적으로 제공되는 속성이 아니기 때문에 직접 추가해주어야 한다.
=> 또한, 개발과정에서 enum에 멤버가 추가된다면? 기존 ordinal이 변경될 수 있으며, 수정이 필요하다면
ordinal로 관리되고 있던 코드들을 전부 수정해야 한다. 그렇기 때문에 속성 추가가 필요하다.
=> 단! 주의해야 할 점이 있다. enum 상수에 속성을 추가하게 되면 반드시 생성자를 추가해주어야 한다.
생성자를 추가하지 않으면 컴파일 오류가 발생한다.
=> enum 클래스 안에서 상수를 열거할 때 세미콜론을 붙여주지 않아도 괜찮다. (붙여도 오류가 안 남)
하지만! 속성을 추가했을 경우 반드시 세미콜론을 붙여주어야 한다.