1. enum
enum은 사실 하나만 알면 된다.
"enum은 singleton의 일종이다."
사실상 설명 끝!!!
enum이라는 말은 Enumeration, 즉 "열거"의 약자이다.
Enumeration Type과 Enumeration constant(열거상수)로 이루어져있다.
사실 enum이 singleton의 일종이라는 것만 알고 코드를 보면 된다.
2. 사용법 (기본) & 원리
enum의 기본 사용법은 다음과 같다.
public enum Week{
MON, TUE, WED, THUR, FRI, SAT, SUM
}
이걸 나중에 사용할 때는
Week.MON
이런 식으로 사용하면 된다.
사용법은 아주 아주 간단하다!!
Week.MON 은 값이 바뀌지도 않으며 외부에서 Week에 저 7개 외에 다른 값을 추가하려고 해도 추가가 안 된다.
이렇게만 보면 어떻게 enum이라는 타입이 존재하지? 어떻게 저런 특성을 가지지?라고 생각할 수도 있는데
이게 singleton이라는 걸 생각하면 굉장히 당연한 결과이다.
즉, enum의 elements들은 singleton이다!!
또한 Week.MON 같은 각각의 elements는 Week type의 public constant (public final static)이다.
외부에서 constructor를 통해 생성이 안 되는 것도 이 이유이며, 값이 고정이며 불변인 것도 같은 이유이다.
대충 이런식의 느낌으로 받아들이면 될 것이다.
public class Week{
private String week;
public static Week MON = new Week("MON");
public static Week TUE = new Week("TUE");
...
private Week(String week){
this.week = week;
}
}
3. enum 응용1 (생성자, Constructor)
public enum Food{
BHC("BHC", "chicken", 18000), SAMYANG("SAMYANG", "ramen", 1000);
private String name;
private String category;
private int price;
private Food(String name, String category, int price){
this.name = name;
this.category = category;
this.price = price;
}
public void info(){
System.out.printf("%s %s 가격: %d%n", name, category, price);
// 사용법 예시
// Food.BHC.info();
}
}
enum도 class처럼 생성자를 만들 수 있다.
하지만 singleton이기 때문에 private로 만들어야 한다는 점만 기억해주면 된다.
4. 응용2 (abstract method)
public enum Food{
BHC("BHC", "chicken", 18000){
@Override
public void info(int num){
System.out.printf("%s를 %d개 시키면 %d원입니다.", name, num, num*price);
}
}, SAMYANG("SAMYANG", "ramen", 1000){
@Override
public void info(int num){
System.out.printf("%s를 %d개 시키기엔 너무 비쌉니다.", name, num);
}
};
// 사용법 예시
// Food.BHC.info(5);
private String name;
private String category;
private int price;
private Food(String name, String category, int price){
this.name = name;
this.category = category;
this.price = price;
}
public abstract void info(int num);
}
이런 식으로 enum도 abstract method를 만들어 사용할 수 있다.
이때 람다를 활용해서 enum element를 생성할 때 구체화시킬 수 있다.
'Language > Java' 카테고리의 다른 글
[JAVA] list (리스트)를 array (배열)로, array를 list로 바꾸기 (0) | 2022.01.20 |
---|---|
[JAVA] List.of() vs Arrays.asList() 차이점 (0) | 2022.01.20 |
자바 예외 종류 (Exception) (0) | 2022.01.18 |
[JAVA] 등위연산자(==), .equals() 차이점 (0) | 2022.01.17 |
[JAVA] InputStreamReader 란?? (+ BufferedReader) (0) | 2022.01.17 |