Enum์ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฅ static final ์์๋ฅผ ์ด์ฉํ๋ ๊ฒ๋ณด๋ค ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ ์ ์์ต๋๋ค. ์ค๋์ ์ด๋ฌํ enum ํ์ฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
1. Enum
enum์ ์๋ก ๊ด๋ จ์ด ์๋ ์์์ ์งํฉ์ ๋๋ค. enum์ด ๋์ค๊ธฐ ์ด์ ์๋ ํด๋์ค์ `private static`์ด๋ `interface`์ ์์๊ฐ์ ํ์ฉํ์ฌ ์์์งํฉ์ ์ ์ํ์์ต๋๋ค.
a. ๊ธฐ์กด ์์์ ๋ฌธ์ ์
1. ์๋ก ๋ค๋ฅธ ์์์งํฉ์ ๋น๊ตํ๋ฉด ์๋๋ค.
- ๊ธฐ์กด ์์์งํฉ๋ค์ ํ์ ๋ง ๊ฐ์ผ๋ฉด ๋น๊ต๊ฐ ๊ฐ๋ฅํ๊ณ ๋์ค์ ๋ฐํ์์์ ์ด๋ก ์ธํ ์๋ฌ๋ฅผ ์ก๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
b. ์ ์๋ฐฉ๋ฒ
public enum Day {
MONDAY, TUESDAY;
}
class DayStatic {
private final static DayStatic MONDAY = new DayStatic();
private final static DayStatic TUESDAY = new DayStatic();
}
enum์ผ๋ก ์์๋ฅผ ์ ์ํ๋ฉด ์๋ DayStatic์ฒ๋ผ ์์ฑ๋ฉ๋๋ค.
c. enum ์ถ๊ฐ์์ฑ
enum์ ์์์ ์ถ๊ฐ ์์ฑ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. ์์์ ๊ด๋ จ์๋ ์์ฑ์ ๋ถ์ฌํ๊ณ ์ถ๋ค๋ฉด enumํด๋์ค์ ํ๋์ ์ ์ํด์ฃผ๊ณ ์ฌ์ฉํด์ฃผ๋ฉด ๋ฉ๋๋ค.
d. enum ์ฅ์
1. ์ฝ๋๊ฐ ๋จ์ํด์ง๋ฉฐ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
2. ์ธ์คํด์ค ์์ฑ๊ณผ ์์์ ๋ฐฉ์งํ๋ค.
3. enum ์์ฝ์ด๋ฅผ ํตํด ๊ตฌํ์ ์๋๊ฐ ์ด๊ฑฐ์์ ๋ํ๋ธ๋ค.
2. ์ผ๋ฐ์์์ enum๋น๊ต
์ ์ฝ๋๋ ์ผ๋ฐ์์์ enum์ผ๋ก ๋ง๋ ์์์งํฉ์ ๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ ์ฝ๋์ฒ๋ผ ์ผ๋ฐ static ์์๋ String๊ฐ์ผ๋ก ๋์ด์ค๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์ค๊ฐ์ ๋ฐ๊ปด๋ ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ์ก์ ์ ์์ต๋๋ค. ์ด๋ ๋ฐํ์์์ ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
enum์ ํ์ฉํ ๋ฉ์๋๋ ์ ํด์ง ์์์ด์ธ์ ๊ฐ์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ๋ฃ์ผ๋ ค๊ณ ํด๋ ์ปดํ์ผ์๋ฌ๊ฐ ๋จผ์ ๋ฐ์ํฉ๋๋ค. ์ค๋ฅ๋ฅผ ์ ์ ์ ์ผ๋ก ์ก์ ์ ์์ต๋๋ค.
3. enum ํ์ฉ
1. ๋ฐ์ดํฐ๋ค ๊ฐ์ ์ฐ๊ด๊ด๊ณ ํํ
์ฝ๋ ์ค์์ ์๋ก ๋ค๋ฅธ ๊ฐ์ด๋ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๊ฐ๋ค์ด ์์ต๋๋ค. ์ด๋ฅผ ํ๋๋ก ๋ชจ์์ enum์ผ๋ก ํํํ ์ ์์ต๋๋ค.
์ ์ฝ๋์ฒ๋ผ ID_CERTIFICATION์ ์ค๋ช ์ธ '์ ๋ถ์ฆ์ธ์ฆ'๊ณผ ์ฝ๋๊ฐ์ธ 'I'์ ํจ๊ป ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ enum์ ์ฌ์ฉํ๋ฉด ์์์ ๋ํด ์ฝ๋๊ฐ์ด ํ์ํ ๋๋ ์ฝ๋๊ฐ ๋ฌด์์ ๋ปํ๋์ง ์๊ณ ์ถ์๋ ์ฝ๋ ๋ถ์์์ด๋ ์์ฝ๊ฒ ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋๋ ํ ๊ณณ์์ ์ฐ๊ด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ์ฝ์ต๋๋ค.
2. ์ํ์ ํ์๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌ
์ฝ๋์ ๋ฐ๋ผ ๋ฉ์๋ ๋ก์ง์ด ๋ถ๊ธฐ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์ ์ํ์ ํ์๊ฐ ๋ถ๋ฆฌ๋์ด ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
์ฝ๋์ ๋ฐ๋ฅธ if๋ฌธ ๋ถ๊ธฐ๋ฅผ ํตํด ์คํํ๊ฒ ๋ฉ๋๋ค.
ํน์ ์ฝ๋๊ฐ ์ํํด์ผํ๋ ๋ก์ง์ด ์ ํด์ ธ์์ ๋ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๊ฐ์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ํน์ ์ฝ๋์ ๋ํด ํน์ ๋ก์ง์ ๋ง๋ค์ด๋ ์๋ก ์ฐ๊ด๋์ด ์๋์ง ์ ์ ์์ต๋๋ค.
์ฝ๋์ ๋ํด ์ด๋ค ๋์์ ํ ์ ์๋์ง history๊ด๋ฆฌ๊ฐ ์๋์๋ค๋ฉด ์ ํ ์ ์์๊ณ ์ด๋ฏธ ์กด์ฌํ๋ ์์ ์ ๋ํ๊ฑฐ๋ ์ด์ ๊ณผ๋ ๋ค๋ฅธ ๋ก์ง์ ๋ง๋ค ์๋ ์์ต๋๋ค.
์ํ์ ํ์ ๋ถ๋ฆฌ ์ ๋ฌธ์ ์
- ์ค๋ณต ์ฝ๋ ์์ฑ
- ํ์คํ ๋ฆฌ ๋ฌด์ง๋ก ์ธํ ๋ณ๊ฒฝ ๋ฐ์ ์ ๋ก์ง ์ฐจ์ด ๋ฐ์
- ๊ด๋ฆฌ ํฌ์ธํธ ์ฆ๊ฐ
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Enum์ด ํน์ ์ฝ๋๋ณ๋ก ํน์ ํ์๋ฅผ ๊ฐ์ง๋๋ก ํ ์ ์์ต๋๋ค.
enum CertificationMethodEnum {
ID_CERTIFICATION("์ ๋ถ์ฆ์ธ์ฆ", "I", () -> {
// ์ ๋ถ์ฆ ์ธ์ฆ ๋ก์ง
return true;
})
, MOBILE_CERTIFICATION("ํธ๋ํฐ์ธ์ฆ", "M", () -> {
// ํธ๋ํฐ ์ธ์ฆ ๋ก์ง
return true;
});
private final String context;
private final String code;
private final BooleanSupplier execute;
CertificationMethodEnum(String context, String code, BooleanSupplier execute) {
this.context = context;
this.code = code;
this.execute = execute;
}
public String getContext() {
return context;
}
public String getCode() {
return code;
}
public boolean executeLogic() {
return execute.getAsBoolean();
}
}
์ ์ฝ๋๋ฅผ ํ์ฉํ์ฌ ํน์ ์ฝ๋์ ๋ํด `executeLogic()`์ ์คํํ๋ฉด ํน์ ์ฝ๋์ ๋ํ ๋ก์ง์ ์ด๋์๋ ๋ณํจ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
(Enum ์์๊ฐ ์ง์ ๋ก์ง์ ์ํ)
3. ๋ฐ์ดํฐ ๊ทธ๋ฃน๊ด๋ฆฌ
1๋ฒ์ฒ๋ผ ๋ฐ์ดํฐ ๊ฐ ์ฐ๊ด๊ด๊ณ๋ฅผ ํํํ ์๋ ์์ง๋ง `๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃน๋ณ๋ก ๊ด๋ฆฌ`ํ ์๋ ์์ต๋๋ค.
`๋ณธ์ธ์ธ์ฆ`์ ์ฃผ์ ๋ก ๋ฐ์ดํฐ ๊ทธ๋ฃน๊ด๋ฆฌ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ , `๋ณธ์ธ์ธ์ฆ`์ `๋ณธ์ธ์ธ์ฆ์๋จ`๊ณผ `์ธ์ฆ๋ฐฉ๋ฒ`์ผ๋ก ๋๋ ์ง๋๋ค.
`๋ณธ์ธ์ธ์ฆ์๋จ`์๋ `์ ๋ถ์ฆ์ธ์ฆ`๊ณผ `ํธ๋ํฐ์ธ์ฆ`์ด ์์ ์ ์์ต๋๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
enum CertificationGroup {
ID_CERTIFICATION("์ ๋ถ์ฆ์ธ์ฆ", Arrays.asList(CertificationWay.ID, CertificationWay.LICENSE)),
MOBILE_CERTIFICATION("ํธ๋ํฐ์ธ์ฆ", Arrays.asList(CertificationWay.SKT, CertificationWay.KT, CertificationWay.LG)),
EMPTY("EMPTY", Collections.EMPTY_LIST),
;
private final String description;
private final List<CertificationWay> certificationWayList;
CertificationGroup(String description, List<CertificationWay> certificationWayList) {
this.description = description;
this.certificationWayList = certificationWayList;
}
public static CertificationGroup findByCertificationWay(CertificationWay certificationWay) {
return Arrays.stream(CertificationGroup.values())
.filter(certificationGroup -> certificationGroup.hasCertificationWay(certificationWay))
.findAny()
.orElse(EMPTY);
}
private boolean hasCertificationWay(CertificationWay certificationWay) {
return certificationWayList.stream()
.anyMatch(way -> way.equals(certificationWay));
}
}
enum CertificationWay {
ID("์ฃผ๋ฏผ๋ฑ๋ก์ฆ"),
LICENSE("์ด์ ๋ฉดํ์ฆ"),
SKT("SKT"),
KT("KT"),
LG("LG");
private final String description;
CertificationWay(String description) {
this.description = description;
}
}
์ด์ `๋ณธ์ธ์ธ์ฆ๋ฐฉ๋ฒ`์ ๋ํ `๋ณธ์ธ์ธ์ฆ์๋จ`์ ๊ด๋ฆฌํ ์ ์๊ณ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์๋ ์์ต๋๋ค.
๋ง์ฝ, ๊ฐ `์ธ์ฆ๋ฐฉ๋ฒ`์ ๋ํ ๋ก์ง์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ํ๋๋ฅผ ์ถ๊ฐํด์ ๋ก์ง์ ์ถ๊ฐํด์ฃผ๋ฉด ๋ชจ๋ `์ธ์ฆ์๋จ`์ ํด๋น ๋ก์ง์ ์ ์ฉ์ํฌ ์ ์์ต๋๋ค.
์ฐธ๊ณ
https://techblog.woowahan.com/2527/
'๐ญComputer Science๐ญ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ผ๊ธ ์ปฌ๋ ์ (First Class Collection)์ ๋ํด ์์๋ณด์ ๐ก (0) | 2022.07.20 |
---|---|
์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค ์ฐจ์ด๋ฅผ ์๊ฐํด๋ณด๊ธฐ ๐คจ (0) | 2022.07.15 |
[JAVA] ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ (0) | 2021.05.30 |
[JAVA] ํจํค์ง์ ๋ํด.. (0) | 2021.04.16 |
[JAVA] Classpath : ํด๋์คํจ์ค (0) | 2021.04.05 |