개발/Java
[Java] Enum
suniverse
2023. 2. 20. 12:01
✍ 상수를 사용하여 한정된 데이터를 관리하는 경우 간편한 선언을 통해 관리할 수 있는 장점이 있으나
해당 값의 범위를 벗어나는 값을 사용할 경우 컴파일 시점에서 오류 발견이 불가능 하다.
추가적인 작업을 통해 범위 내의 값인지 판별하는 작업이 별도로 필요하다.
이를 해결하는 것이 바로 열거형 Enum Type이다.
✍ 열거타입 정의 방법
[접근제한자] enum 열거타입명 {
// 열거타입에서 사용할 값(상수)을 차례대로 나열
}
--> 열거타입은 클래스, 인터페이스 정의 문법과 유사하다.
단, 열거타입 중괄호 내에는 상수로 사용될 이름만 지정한다.
✍ 열거타입 사용 방법
1. 열거타입 변수 선언 방법 => 클래스, 인터페이스와 동일
- 열거타입명 변수명
ex) Tv(열거타입명) tv(변수명)
2. 열거타입 상수 접근 방법 => 일반 상수와 동일
- 열거타입명.상수명
ex) Tv.CHANNEL
3. 열거타입 비교 방법
- if문 사용 시 동등비교 연산자 사용 (==)
- switch문 사용이 가능하다. 단, case문에서 열거타입명 없이 상수만 지정하여야 한다.
switch(열거타입변수) {
case 열거타입상수1 : 수행할 작업들... ;
case 열거타입상수2 : 수행할 작업들... ;
case 열거타입상수n : 수행할 작업들... ;
}
🔍 그럼 이제 상수를 사용하는 경우와 열거타입을 사용하는 경우의 차이를 비교해보자. 왜 열거타입을 사용하면 더 편리해지는지 !!
✍ Enum으로 요일 열거 하기
enum EnumWeek { // 사실 여기에 EnumWeek의 객체가 생성되어 있다. 생략되어 있음
MONDAY, TUESDAY, WEDNSDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
✍ 열거타입을 사용하는 클래스 정의하기
class Week { // 클래스
EnumWeek myWeek; // enum은 클래스 내에서 변수로 선언 가능하다. (로컬변수도 가능)
public EnumWeek getMyWeek() { // getter
return myWeek;
}
public void setMyWeek(EnumWeek myWeek) { // setter
this.myWeek = myWeek;
}
public void printWeek() { // 메서드
switch (myWeek) {
case MONDAY: System.out.println("오늘은 월요일 입니다!");
break;
case TUESDAY: System.out.println("오늘은 화요일 입니다!");
break;
case WEDNSDAY: System.out.println("오늘은 수요일 입니다!");
break;
case THURSDAY: System.out.println("오늘은 목요일 입니다!");
break;
case FRIDAY: System.out.println("오늘은 금요일 입니다!");
break;
case SATURDAY: System.out.println("오늘은 토요일 입니다!");
break;
case SUNDAY: System.out.println("오늘은 일요일 입니다!");
break;
}
}
}
--> enum은 변수로 활용이 가능하다.
✍ 만약 열거타입을 사용하고 싶다면?
Week w = new Week(); // 객체 생성
w.setMyWeek(EnumWeek.SATURDAY); // 반드시 열거타입명.상수 => 형태로 접근해야 한다
w.printWeek(); // 메서드 호출
--> 메인메서드에서 객체를 생성한 후 => set 메서드를 활용하여 enum 상수를 호출한다.
이때 주의할 점 !!!!!!!!!!! 반드시 열거타입명.상수 => 의 형태로 접근해야 한다. static을 사용할 때 클래스 명으로 접근해야 함을 떠올려보면 쉽다.