๐ก ๋ชฉํ : ์๋ฐ์ ์ด๊ฑฐํ์ ๋ํด ํ์ตํด๋ณด์.
โก๏ธ ๋ชฉ์ฐจ
- enum ์ ์ํ๋ ๋ฐฉ๋ฒ
- enum์ด ์ ๊ณตํ๋ ๋ฉ์๋
- java.lang.Enum
- EnumSet
public static final
์ ํตํด ๋ํํ๋ ๋ฌธ์๋ฅผ ์ ์ ํ์
์ ์์๋ก ์ ์ํ๋ ๋ฐฉ๋ฒ์ฌ์ฉ์์
public class Card {
public static final int CLOVER = 0;
public static final int HEART = 1;
public static final int DIAMOND = 2;
public static final int SPADE = 3;
public static final int TWO = 0;
public static final int THREE = 1;
public static final int FOUR = 2;
public static void main(String[]args) {
System.out.println("Card.CLOVER == Card.TWO); //true
}
}
โ๏ธ ์ ์ํ ์ด๊ฑฐ ํ์ ์ ๋จ์ ๋ค
โ๏ธ ์ ์ ๋์ "๋ฌธ์์ด์ ์ด์ฉํ ๋ณํ ํจํด"
์ฌ์ฉ์์
public enum Kind { CLOVER, HEART, DIAMOND, SPADE }
public enum Value { TWO, THREE, FOUR }
์ ์ฝ๋๋ฅผ ์๋ฐ enum์ผ๋ก ๋ณ๊ฒฝํ์ ๋ Card.CLOVER == Card.TWO
์ด๋ ๊ฒ ์๋ฏธ๋ ๋ค๋ฅด์ง๋ง ์ค์ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ก ์ธํ ๋๋ฑ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊น?
Enum์์๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์์ผ๊น? ์๋ฐ์์์ Enum์ ๊ฐ ๋ฟ๋ง ์๋๋ผ ํ์
๋ ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์
์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์์ ๋น๊ต ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
์ด๊ฑฐํ(Enumerated Type)์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ์ด๋ค. ๊ธฐ์กด์ ์์๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ (TypeSafe)๋ฅผ ๊ฐ์ ํ๊ณ ์ jdk 1.5 ๋ถํฐ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ค.
โ๏ธ ๋ณ์๋ฅผ ์์๋ก
์์๋ ๋ณํ์ง ์๋ ์๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ๋ณ์์ ๊ณ ์ ๋ ๊ฐ์ ์ง์ด๋ฃ์ผ๋ฉด ๊ทธ ๋ณ์๋ ์์๊ฐ ๋ ์ ์๋ค.
int bicmac = 1;
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ซ์๋ณ๋ก ์ด๋ค ํ๋ฒ๊ฑฐ ์ธ์ง ๊ตฌ๋ถํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
public class BeforeEnum {
public static void main(String[]args) {
/*
1๋ฒ์ ๋น
๋งฅ
2๋ฒ์ ๋ถ๊ณ ๊ธฐ
3๋ฒ์ ์น์ฆ๋ฒ๊ฑฐ
*/
int type = 2;
switch(type) {
case 1 :
System.out.println("๋น
๋งฅ");
break;
case 2 :
System.out.println("๋ถ๊ณ ๊ธฐ");
break;
case 3 :
System.out.println("์น์ฆ");
break;
}
}
}
Output
๋ถ๊ณ ๊ธฐ
ํ์ง๋ง ์ด๋ฐ ์ฝ๋๋ ๋ฌธ์ ๊ฐ ์๋ค. ์๊ฐ์ด ํ๋ฌ ์ฝ๋๋ฅผ ์กฐ์ํ๋ค๊ฐ ์ฃผ์์ ์ ํ ์ ๋ณด๊ฐ ์์ด์ก๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋ง์ฝ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ด๋ฅผ ๋ฐ๊ฒฌํ๋ฉด type์ด ์ด๋ค ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋์ง ๋ชจ๋ฅผ ๊ฒ์ด๋ค.
โ๏ธ final์ ์ด์ฉํ ์์
์ฃผ์์ด ์์ด์ก๋ค๋ ์ด์ ๋ก ์ฝ๋๋ฅผ ๋ถ์ํ๊ธฐ ์ด๋ ค์ฐ๋ฉด ๋งค์ฐ ํ๋ค ๊ฒ์ด๋ค. ์ด๋ด ๋ ์ซ์๋ณ๋ก ๋ณ์๋ฅผ ๋ง๋ ํ, ๋ถ๋ณํ๊ธฐ ์ํด final, ์ด์ฐจํผ ๋ฐ๋์ง ์์ ๊ฐ์ด๋ผ๋ฉด ํด๋์ค ๋ณ์๋ก ์ง์ ํ๋ ๊ฒ์ด๋ค.
public class BeforeEnum {
private final static int BIGMAC = 1;
private final static int BULGOGI = 2;
private final static int CHEESE = 3;
public static void main(String[]args) {
int type = BIGMAG;
switch(type) {
case BIGMAG :
System.out.println("๋น
๋งฅ");
break;
case BULGOGI :
System.out.println("๋ถ๊ณ ๊ธฐ");
break;
case CHEESE :
System.out.println("์น์ฆ");
break;
}
}
}
์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ ๋งจ์ฒ์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ณ์๋ช
์ผ๋ก ์ฝ๋๋ฅผ ๋ถ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ์ ์ง๋ณด์๊ฐ ์ฌ์์ก๋ค.
โ๏ธ์์์ ์ค๋ณต
ํ๋ก๊ทธ๋จ์ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ง๋ค๋ค๋ณด๋ ํ๋ฒ๊ฑฐ์ ๋ํ ์์๋ง๊ณ , ๋งฅ์ฌ๋ฐ์ด ํ์ฌ ๋ฒ๊ฑฐ์ ๋ํ ์์๊ฐ ํ์ํด์ก๋ค.
public class BeforeEnum {
// ์ผ๋ฐ ํ๋ฒ๊ฑฐ
private final static int BIGMAC = 1;
private final static int BULGOGI = 2;
private final static int CHEESE = 3;
// ๋งฅ์ฌ๋ฐ์ด
private final static int BIGMAC = 1; // ์ปดํ์ผ ์๋ฌ ๋ฐ์
private final static int SHANGHI = 2;
private final static int SHRIMP = 3;
ํ์ง๋ง ์ผ๋ฐ ํ๋ฒ๊ฑฐ์ BIGMAC ์์์, ๋งฅ์ฌ๋ฐ์ด BICMAC ์์๊ฐ ๊ฒน์น๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ณ์๋ช
์์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ๋ค์ ๋ณ์๋ช
์ ๊ตฌ๋ถ์ง๊ธฐ๋ก ํ๋ค.
โ๏ธ ๋ค์ ์คํ์ด์ค ๊ธฐ๋ฒ
์ด๋ฆ์ด ์ค๋ณต๋๋ ํ๋ฅ ์ ๋ฎ์ถ๊ธฐ ์ํ ๊ธฐ๋ฒ์ผ๋ก ์์์ ์์์ ์ด๋ฆ์ด ๊ฒน์น๊ธฐ ๋๋ฌธ์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ์์๋ช
์ ์๋ก ์ง์๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ๋ง์ฝ ์์๋ฅผ ์ถ๊ฐํด์ผํ ์ผ์ด ์์ผ๋ฉด ์ ์ธ๋ถ๋ ๋งค์ฐ ์ง์ ๋ถํ ์ํ๊ฐ ๋ ๊ฒ์ด๋ค.
public class BeforeEnum {
// ์ผ๋ฐ ํ๋ฒ๊ฑฐ
private final static int BIGMAC = 1;
private final static int BULGOGI = 2;
private final static int CHEESE = 3;
// ๋งฅ์ฌ๋ฐ์ด
private final static int BIGMAC = 1; // ์ปดํ์ผ ์๋ฌ ๋ฐ์ํ์ง
private final static int SHANGHI = 2;
private final static int SHRIMP = 3;
......
}
โ๏ธ ๊ธฐ์กด ์์๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ํ ๋ฌธ์ ๋ค
์์์ ํ๋ ์ฝ๋๋ค์ ๋ณด๋ฉด ์์ง๊น์ง ๋ณ ๋ฌธ์ ๊ฐ ์๋ค. ํ์ง๋ง ๋ง์ฝ ์ผ๋ฐ ํ๋ฒ๊ฑฐ์ ๋น
๋งฅ๊ณผ, ๋งฅ์ฌ๋ฐ์ด ๋น
๋งฅ์ ๋น๊ตํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ค์ ๋ก ๋๋ค ๊ตฌ์ฑํ์ ๋์ผํ์ง๋ง ์ค์ง์ ์ผ๋ก ๊ฐ๊ฒฉ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ค๊ณ ๋ณผ ์ ์๋ค. ์ด๋ฅผ ๋น๊ตํ๋ ์ฝ๋ ์์์ ๊ฐ๋ฐ์์ ๋ชฉ์ ์ false๊ฐ ๋์์ผํ์ง๋ง ์ค์ ๋ก true๊ฐ ๋ฐ์ํ๋ค. (ํ์
์ ๋ค๋ฅด์ง๋ง ๊ฐ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์์ ๊ฒฐ๊ณผ๋ true) ์ฆ, TypeSafeํ์ง ๋ชปํ๋ค๋ ๊ฒ์ด๋ค.
public class BeforeEnum {
// ์ผ๋ฐ ํ๋ฒ๊ฑฐ
private final static int NORMAL_BIGMAC = 1;
private final static int NORMAL_BULGOGI = 2;
private final static int NORMAL_CHEESE = 3;
// ๋งฅ์ฌ๋ฐ์ด
private final static int MACALL_BIGMAC = 1;
private final static int MACALL_SHANGHI = 2;
private final static int MACALL_SHRIMP = 3;
public static void main(String[]args) {
int type = NORMAL_BIGMAC;
if (NOMAL_BIGMAC == MACALL_BIGMAC) {
// ์ผ๋ฐ ๋น
๋งฅ๊ณผ ๋งฅ์ฌ๋ฐ์ด ๋น
๋งฅ์ ๊ตฌ์ฑํ์ ๋๊ฐ์ง๋ง, ๊ฐ๊ฒฉ์ ์์ด ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ผ๋ฉด ์๋๋ค.
}
}
}
โ๏ธ enum์ ์ฌ์ฉํ ์์ ์ฌ์ฉ
์ผ๋ฐ ํ๋ฒ๊ฑฐ, ๋งฅ์ฌ๋ฐ์ด ๋ณ๋ก enum์ ๋ง๋ค์๋ค. NORMAL_BIGMAC
, MACALL_BIGMAC
์ ๋น๊ตํด๋ณด๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋น๊ต ์กฐ์ฐจ๋ ํ ์ ์๋ค.
public class AfterEnum {
enum NORMAL {
BIGMAC, BULGOGI, CHEESE
}
enum MACALL {
BIGMAC, SHANGHI, SHIRIMP
}
public static void main(String[]args) {
if (NORMAL.BIGMAC == MACALL.BIGMAC) {
// ์ปดํ์ผ ์๋ฌ ๋ฐ์.. ํ์
๋ถ์ผ์น
}
}
}
public enum Week {
MONDAY,
THUSDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
class WeekExample {
public static void main(String[]args) {
Week today1 = Week.SUNDAY;
Week today2 = Week.SUNDAY;
System.out.println(today1 == today2); // ๋์ผ ์ฐธ์กฐ ๊ฐ
}
}
Output
true
Week enum ํด๋์ค
Week ํ์
์ today ์ฐธ์กฐ๋ณ์
==
์ compareTo()
์ฌ์ฉ๊ฐ๋ฅ (๋ฑ๊ฐ๋น๊ต์ฐ์ฐ์ ๊ฐ๋ฅ)=
, >
, >=
, <
, <=
, <>
๊ฐ์ ๋น๊ต์ฐ์ฐ์๋ ์ฌ์ฉํ ์ ์์ (์ปดํ์ผ ์๋ฌ)์ ๋น๊ต์ฐ์ฐ์๋ฅผ ์ธ ์ ์์๊น?
๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ถ์ํด๋ณด๋ฉด ์๊ฒ ์ง๋ง enum์ ํด๋์ค์ด๋ค. ํด๋์ค์์ ๋น๊ต์ฐ์ฐ์๋ฅผ ์ธ ์ ์์๋? ๋ค์ ์๊ฐํด๋ณด๋ฉด ๊ฐ์ฒด์ ๊ฐ์ฒด๋ ์๋ก ๋น๊ต์ฐ์ฐ์๋ฅผ ์ธ ์ ์๊ธฐ ๋๋ฌธ์ enum์์ ์ง์ํ์ง ์๋๋ค.
์์์ ๋ณธ java.lang.Enum ์ฆ ์ด๊ฑฐํ์ ์กฐ์ ํด๋์ค์์ values(), valueOf() ๋ฉ์๋์ ๋ํ ๋ด์ฉ์ ์์ธํ ์ฐพ์๋ณผ ์ ์๋ค. ๊ทธ ์ด์ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์ถ๊ฐํด์ฃผ๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฉ์๋ | ์ค๋ช |
---|---|
static E values() | ํด๋น ์ด๊ฑฐ์ฒด์ ๋ชจ๋ ์์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ ์์ฑํ์ฌ ๋ฐํ |
static E valuesOf(String name) | ์ ๋ฌ๋ ๋ฌธ์์ด๊ณผ ์ผ์นํ๋ ํด๋น ์ด๊ฑฐ์ฒด์ ์์๋ฅผ ๋ฐํ |
enum Hamburger {
BIGMAC, SHANGHI, MACCHIKEN;
}
public class EnumTest {
public static void main(String[]args) {
Hamburger hamburger = Hamburger.valueOf("MACCHIKEN");
System.out.println(hamburger + " ๋ฒ๊ฑฐ ์
๋๋ค.");
}
}
Output
MACCHIKEN ๋ฒ๊ฑฐ ์ ๋๋ค.
enum Hamburger {
BIGMAC, SHANGHI, MACCHICKEN;
}
public class EnumTest {
public static void main(String[] args) {
Hamburger hamburger[] = Hamburger.values();
System.out.println("ํ์ฌ ์ ํฌ ๋งค์ฅ์ ์๋ ๋ฒ๊ฑฐ๋");
for (Hamburger burgers : hamburger) {
System.out.println(burgers + " ๋ฒ๊ฑฐ๊ฐ ์์ต๋๋ค.");
}
}
}
Output
ํ์ฌ ์ ํฌ ๋งค์ฅ์ ์๋ ๋ฒ๊ฑฐ๋
BIGMAC ๋ฒ๊ฑฐ๊ฐ ์์ต๋๋ค.
SHANGHI ๋ฒ๊ฑฐ๊ฐ ์์ต๋๋ค.
MACCHICKEN ๋ฒ๊ฑฐ๊ฐ ์์ต๋๋ค.
()
์์ ๋์
ํ๋ฉด ๋๋ค.()
์์ ๋์
ํ๋ ๊ฒ์ด ์๋๋ผ ์ถ๊ฐ์ ์ผ๋ก ํด์ผํ๋ ์์
์ด ์๋ค./**
- () ์์ ์ํ๋ ๊ฐ์ ์ ์ผ๋ฉด ๋๋ค.
- ํ์ง๋ง ์ด๋ ๊ฒ ์์ฑํ๊ธฐ ์ํด์ ์ถ๊ฐ์ ์ธ ์์
์ด ์๋ชจ๋๋ค.
- ๋ด๋ถ์ ์ผ๋ก ๋ถ์ฐ์์ ์ธ ๊ฐ์ ์ฃผ๊ธฐ ์ํ์ฌ ์์ฑ์๋ฅผ ๋ง๋ค์ด ๊ฐ์ ๋ฐ์์จ ํ, ์ธ์คํด์ค ๋ณ์์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. */
enum Day {
SUNDAY(1), MONDAY(5), TUESDAY(0), WEDNESDAY(2), THURSDAY(6), FRIDAY(3), SATURDAY(4);
private final int value;
// ํญ์ ์ ๊ทผ ์ ์ด์๋ private์ด๋ค.
DAY (int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
์ฃผ์์ฌํญ
Day day = new Day(1); // ์ด๊ฑฐํ์ ์์ฑ์๋ ์ธ๋ถ์์ ํธ์ถ์ด ๋ถ๊ฐ๋ฅํ๋ค.
โ๏ธ Set
Set์ ๊ฐ์ฒด(๋ฐ์ดํฐ)๋ฅผ ์ค๋ณตํด์ ์ ์ฅํ ์ ์๋ค. ๋ํ ์ ์ฅ๋ ๊ฐ์ฒด(๋ฐ์ดํฐ)๋ฅผ ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฅ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค. Set ์ปฌ๋ ์
์ ๊ตฌํํ๋ ๋ํ์ ์ธ ํด๋์ค๋ค์ HashSet, TreeSet, LinkedHashSet๋ฑ์ด ์๋ค. ์ฃผ๋ก ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฉ์๋๋ค์ add, iterator, size, remove, clear๋ค์ด ์๋ค.
โ๏ธ EnumSet
ํน์ง
Set ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ Enumeration Type์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
๋ฉ์๋ | ์ค๋ช |
---|---|
allOf(Class elementType) | ์ธ์๋ก ๋ค์ด์จ enum์ ๊ทธ๋๋ก enum set ์์ฑ |
range(E fro,, E to) | ์ฒ์๊ณผ ๋์ ์ ๋ ฅํ๋ฉด ๊ทธ ์ฌ์ด์ ์๋ ๊ฐ๋ค๋ก enum set ์์ฑ |
complementOf(EnumSet s) | ์ธ์๋ก ๋ค์ด์จ enum set์์ ์๋ ์์๋ค๋ก ๋ง ๋ค์ enum set ์์ฑ |
of(E e1, E e2, E e3, E e4, E e5) | ๋ค์ด๊ฐ ์์๋ฅผ ์ง์ ์ ๋ ฅํ์ฌ EnumSet์ ์์ฑํ ์ ์๋ค. |
EnumSet.copyOf(EnumSet.of(E e1, E e2โฆ)) | ๋ค๋ฅธ EnumSet์ ๋ณต์ฌํ์ฌ ์๋ก์ด EnumSet์ ๋ง๋ค ์ ์๋ค. |
enum Color {
RED, YELLOW, GREEN, BLUE, BLACK, WHITE
}
public class EnumSetExample {
public static void main(String[]args) {
System.out.println(EnumSet.allOf(Color.class));
System.out.println(EnumSet.range(Color.YELLOW, Color.BLUE));
System.out.println(EnumSet.complement(EnumSet.of(Color.BLACK, Color.WHITE));
System.out.println(EnumSet.of(Color.BLACK, Color.WHITE));
}
}
Output
[RED, YELLOW, GREEN, BLUE, BLACK, WHITE]
[YELLOW, GREEN, BLUE]
[RED, YELLOW, GREEN, BLUE]
[BLACK, WHITE]
ํํ๋ก์ ํธ ๋๋ฌธ์ ๋ฆ๊ธด ํ์ง๋ง ๋ชจ ์ด์ฉ๋ผ๊ตฌ ~!~ ๋ด๋งด๋๋ฃจ ํ ๊บผ๋ค ~~ ๊ทธ๋ฆฌ๊ณ ํ๋ค๋ฉด ์ฌ์๋ค๊ฐ ํ ๊บผ๋ค ~~๋ ํ๋ณด์นผ๊บผ๋ค ! ~ ~ ~ ๋ค์์ฃผ๋ ํ๋ด์ ํ ๊บผ๋ค ~~ ~ ์ด์ฌํ ํ ๊บผ๋ค ~!~ โจ
[์ฐธ๊ณ ]
https://velog.io/@ljs0429777/11์ฃผ์ฐจ-๊ณผ์ -Enum#enum
https://www.notion.so/11-Enum-ccbba2bf2b7746ed8a12d2dee09aa833#b46f3984088f43519e26eeb61d6b16f6