자바

enum

chantleman 2024. 7. 17. 18:24

자바에서 enum은 상수 집합을 정의하는 특별한 데이터 타입입니다.
enum을 사용하면 관련된 상수들을 그룹화하여 코드의 가독성과 유지보수성을 높일 수 있습니다.
 
 
 

public class Day {

	public static void main(String[] args) {
		Day d =new Day();
		d.week("sun");
	}

	public void week(String day) {		
		if(day.equals("sun")) System.out.println("일");	
       		if(day.equals("mon")) System.out.println("월");	
        	if(day.equals("tue")) System.out.println("화");	
        	if(day.equals("wed")) System.out.println("수");	
        	if(day.equals("thu")) System.out.println("목");	
        	if(day.equals("fri")) System.out.println("금");	
        	if(day.equals("sat")) System.out.println("토");	
	}
}

week 함수에서 sun, mon, tue, ... 이런식으로 설정을 해놨기 때문에
main함수에 있는 d.week()에 꼭 “sun”라고 입력해야 "일"이 출력됩니다. 
 
만약 sunday라고 입력을 해버리면 값이 출력되지 않기때문에
이러한 개발자들의 실수를 대비하기 위해 enum을 사용합니다.
 


 
enum 생성방법)
파일 생성할 때 class말고 enum을 create합니다.
<Week.java>

public enum Week {
	SUN, MON, TUE, WED, THU, FRI, SAT;	
}

상수를 (대문자로) 나열합니다.
 
 
 
그리고 다시 class파일에서
<Day.java>

public class Day {

	public static void main(String[] args) {
		Day d =new Day();
		d.week(Week.FRI);
	}

	public void week(Week week)
	{
		if(week ==Week.SUN) System.out.println("일요일");
		if(week ==Week.MON) System.out.println("월요일");
		if(week ==Week.TUE) System.out.println("화요일");
		if(week ==Week.WED) System.out.println("수요일");
		if(week ==Week.THU) System.out.println("목요일");
		if(week ==Week.FRI) System.out.println("금요일");
		if(week ==Week.SAT) System.out.println("토요일");
	}
}

week메소드를 만들고
아까 만들었던 Week.java에 저장해뒀던 상수들을 꺼내옵니다.
 
 
그리고 main함수에서 객체생성후 d.week()을 입력할 때
'Week.' 을 입력하면 

이런식으로 아까 적어두었던 상수들이 옆에 나타나게 됩니다.
 
그럼 다른 값을 입력하고 싶어도 입력할 수 없기 때문에 개발자 입장에서 실수할 여지를 줄일 수 있게 됩니다.
 

Week.FRI했을 때의 출력값

 
 
 


더 편한 방식)
 
위 방식대로라면 

public enum Month {
	JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC;
}

enum을 이렇게 만들고
 

public class MM {

	public static void main(String[] args) {
		MM obj = new MM();
		obj.month(Month.APR);
	}

	public void month(Month mon) {
		if(mon == Month.JAN) System.out.println("1월");
		if(mon == Month.FEB)  System.out.println("2월");
		if(mon == Month.MAR)  System.out.println("3월");
		if(mon == Month.APR)  System.out.println("4월");
		if(mon == Month.MAY)  System.out.println("5월");
		if(mon == Month.JUN)  System.out.println("6월");
		if(mon == Month.JUL)  System.out.println("7월");
		if(mon == Month.AUG)  System.out.println("8월");
		if(mon == Month.SEP)  System.out.println("9월");
		if(mon == Month.OCT)  System.out.println("10월");
		if(mon == Month.NOV)  System.out.println("11월");
		if(mon == Month.DEC)  System.out.println("12월");
	}
}

클래스에서 이런 식으로 해야하는데,
 
 
 
더 간편한 방법이 있습니다.
< Month.java > 

public enum Month {
	JAN("1월"), FEB("2월"), MAR("3월"), APR("4월"), 
	MAY("5월"), JUN("6월"), JUL("7월"), AUG("8월"), 
	SEP("9월"), OCT("10월"), NOV("11월"), DEC("12월");
	
	String num;
	Month(String num)
	{
		this.num=num;		
	}	
}

enum에서 이렇게 상수를 입력하고 생성자를 만든후
 
<MonthMain.java>

public class MonthMain {
	public static void main(String[] args) {
		MonthMain obj = new MonthMain();
		obj.month(Month.APR);
	}
	
	public void month(Month mon) {
		System.out.println(mon.num);
	}
}

아까 만든 Month 생성자를 month함수에서 파라미터로 받고,
main함수에서 Month.APR을 입력하게 되면 4월이 출력됩니다.

 

'자바' 카테고리의 다른 글

static singleton 템플릿  (0) 2024.07.19
자바 로또 예제  (0) 2024.07.18
생산자, 오버로딩 활용하여 원기둥 부피 구하기 예제  (0) 2024.07.15
점3개로 삼각형 넓이 구하기 예제  (1) 2024.07.15
constructor, 생성자  (0) 2024.07.15