✅ 현실세계 열거타입
열거형 타입: 특정 타입이 몇 가지 한정된 값을 가지는 타입
선택지가 선택된 타입
예시:
- 게절(봄, 여름, 가을 겨울)
- 3단계 평가(잘 함/ 보통/ 노력 요함)
- 요일
✅ Enum
자바 Enum이 바로 열거형 타입
Enum의 각각 요소는 독립된 특수한 틀래스로 구분되는 인스턴스이다.
👍🏻 사용 이유
- 가독성 향상
- 허용 가능한 값 제한 ➡️ 유형 안정성 제공
불 꺼짐/ 불 켜짐 같은 특정 개수의 변수만 설정 가능하도록 하고 싶음
근데 String light= "ON"
이런식으로 정의했다가 on 이렇게 대문자 빼먹으면 어떡함 ㅠㅠ
- final 필드 추가
- switch와 함께 쓰면 매우 강력
✔️ 작성 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
| //ButtonMode.java
//enum은 대문자로 적는다.
public enum ButtonMode {
LIGHT, DARK
}
//ButtonType.java
public enum ButtonType {
WOOD, STEEL, PLASTIC
}
//Main.java
Button button1 = new Button();
button1.setButtonMode(ButtonMode.DARK);
button2.setButtonType(ButtonType.PLASTIC)
|
✔️ 클래스 내부에 바로 작성하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| //Button.java
public class Button {
enum Mode { LIGHT, DARK }
enum Type { WOOD, STEEL, PLASTIC }
private Mode mode = Mode.LIGHT;
private Type type = Space.PLASTIC;
public void setMode(Mode mode) {
this.mode = mode;
}
public void setType(Type type) {
this.type = type;
}
}
//Main.java
Button button1 = new Button();
button1.setButtonMode(ButtonMode.DARK);
button2.setButtonType(ButtonType.PLASTIC)
|
✔️ 열거형도 클래스처럼 필드, 생성자, 게터, 세터, 메소드를 가질 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| //enum
public enum Students{
SH("So Hee", 10, 1),
CS("Cesar", 15, 0),
KT("KyuTae", 4, 0)
//enum의 field
private String name;
private int age;
private int gender;
//enum constructor
Students(Stirng name, int age, int gender){
this.name= name;
this.age= age;
this.gender= gender;
}
//enum getter, setter
public String getName(){return name;}
public int getAge(){return age;}
public void setAge(int age){
this.age= age;
}
//enum method
public String getDesc(){
String stickers="";
if(age > 8){
stickers= "🏆".repeat(age);
}
return "%s 학생은 %s살입니다. ".formatted(name, age);
}
}
//Main.java
Students students1= Students.SH;
Students students2= Students.CS;
Students students3= Students.KT;
//getter
String studentName= students1.getName();
int studentAge= students2.getAge();
String studentDesc= students2.getDesc()
//setter
students3.setAge(24); //규태 이제 24살 됨
|
✔️ 열거형의 메소드
💡 valueOf 메소드
1
2
3
| Students.valueOf("SH")
//SH라는 문자를 가진 학생 반환
|
💡 name 메소드 : 각 항목의 이름 반환
1
2
| student.name()
//각 항목의 이름을 string으로 반환
|
💡 ordinal 메소드 : 순번 반환
1
2
3
| int[] standInLine = new int[] {
student1.ordinal(), student2.ordinal(), student3.ordinal()
};
|
💡 compareTo: 순번을 비교
열거 객체를 비교하여 순번 차이를 리턴 누가 앞에/뒤에 있는가?
💡 values 메소드 : 전체 포함된 배열 반환
1
2
3
4
5
| Students[] order = Students.values();
for (Students person : order) {
System.out.println(person.getDesc());
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| public class DayEnumTest {
public static void main(String[] args) {
//각자 enum값 정의
Day monday= Day.MONDAY;
Day thursday= Day.THURSDAY;
Day sunday= Day.SUNDAY;
//💡Ordinal
System.out.println("Monday ordinal "+ monday.ordinal()); //1
System.out.println("Thursday ordinal "+ thursday.ordinal()); //4
//💡CompareTo
//어떤 값이 더 빨리/뒤에 오는가?
System.out.println("Monday ordinal "+ monday.compareTo(thursday)); // 1 - 4= -3
System.out.println("Monday ordinal "+ monday.compareTo(sunday)); // 1 - 0 = 1
//💡values
//array로 출력해야
Day[] days= Day.values();
System.out.println(Arrays.toString(days)); //[SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]
}
}
|