개발/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 클래스 안에서 상수를 열거할 때 세미콜론을 붙여주지 않아도 괜찮다. (붙여도 오류가 안 남) 

하지만! 속성을 추가했을 경우 반드시 세미콜론을 붙여주어야 한다.