https://kadosholy.tistory.com/114
https://velog.io/@kyle/자바-Enum-기본-및-활용
위의 두 글을 참고하였습니다.
💡 정의
- 열거라는 뜻으로, 서로 관련을 가진 상수들의 집합이다.
- (Java에선 final로 자료형을 고정했을 때 이렇게 고정된 값을 "상수"라고 함.)
- 어떠한 클래스가 상수만으로 작성되어 있다면 반드시 클래스로 선언할 필요는 없기에 사용.
- => 클래스 내에서 네이밍이 겹칠 수도 있고 불필요하게 상수가 많아지는 걸 방지.
🔎 특징
- Default 생성자는 private로 되어 있다.
- 생성자는 클래스가 로드되는 시점에서 생성되기 때문에 임의로 생성불가.
- 상수 값과 동일하게 유일한 하나의 인스턴스가 생성되어 사용된다.
- 상속을 지원하지 않는다.
- 클래스와 같은 문법체계를 따른다.
- 서로 관련 있는 상수 값들을 모아 구현할 때 유용하다.
📌 선언방법
- 클래스명과 같이 이름의 첫 글자를 대문자로 설정함.
- 열거값은 , 로 구분하며 상수와 같이 대문자를 사용한다.
enum Week { SUN, MON, TUE, WED, THU, FRI, SAT }
📌 메소드
- valueOf(String str) : 문자열 str과 일치하는 열거값을 반환한다.
- values() : 열거값 전부를 배열로 반환한다.
- ordinal() : 열거값의 순서를 반환한다.
📌 사용예제
enum Week1 {
SUN, MON, TUE, WED, THU, FRI, SAT
}
enum Week2 {
SUN("일"), MON("월"), TUE("화"), WED("수"), THU("목"), FRI("금"), SAT("토");
final private String day;
Week2(String day) {
this.day = day;
}
String getDay() {
return day;
}
}
public class HelloWorld {
public static void main(String[] args) {
String s = "MON";
Week1 w1 = Week1.SUN;
Week2 w2 = Week2.valueOf(s);
System.out.println(w1);
System.out.println(w2);
Week1[] arrayWeek1 = Week1.values();
for (Week1 w: arrayWeek1) {
switch (w) {
case SAT:
System.out.print("토요일" + ", "); break;
case SUN:
System.out.print("일요일" + ", "); break;
default:
System.out.print("평일 " + ", "); break;
}
}
Week2[] arrayWeek2 = Week2.values();
for (Week2 w: arrayWeek2) {
if (w == Week2.WED) {
System.out.println();
System.out.println(w.ordinal() + "번째 요일은 => " + w.getDay());
}
}
}
}
실행결과
SUN
MON
일요일, 평일 , 평일 , 평일 , 평일 , 평일 , 토요일,
3번째 요일은 => 수
- Week2[] arrayWeek2에 담고 나서,
아래 for문으로 getDay()를 호출하면 하면 "수"가 나오고,
그 조건(if)는 "Week.WED"를 사용하는 게 살짝 헷갈려서 알아보았더니 - 위에 설명한 것 처럼 Enum을 만들었을 때부터 MON이란 이름의 "월"이라는 필드가 자동 생성되어 있던 것이다.
- 그래서 호출은, MON으로 부르되, 실제 필드에 담기는 값은 "월"이라는 것.
'Java' 카테고리의 다른 글
[Java] 연산자 + 조건문/반복문 (0) | 2023.08.09 |
---|---|
[Java] 인터페이스 (0) | 2023.08.09 |