Enum
๋ฐ์ดํฐ ์ค์์๋ ์์ผ ( ์, ํ, ์, ๋ชฉ, ๊ธ, ํ , ์ผ ), ๊ณ์ ( ๋ด, ์ฌ๋ฆ, ๊ฐ์, ๊ฒจ์ธ) ๋ฑ๊ณผ ๊ฐ์ด ๋ช ๊ฐ์ง ํ์ ๋ ๊ฐ์ ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ํํ ์์ต๋๋ค.
์์ผ, ๊ณ์ ๊ณผ ๊ฐ์ด ํ์ ๋ ๋ฐ์ดํฐ๋ง์ ๊ฐ์ง๋ ํ์
์ Enumeration Type์ด๋ผ๊ณ ํ๋ฉฐ ์ด๊ฑฐํ์
์ ๋ค์ด๊ฐ๋ ๊ฐ( ์, ํ ,์ ๋ฑ )๋ค์ ์ด๊ฑฐ ์์( Enumeration constant)๋ผ๊ณ ํฉ๋๋ค.
JAVA 1.5๋ถํฐ ์ด๋ฌํ ์ด๊ฑฐํ ํ์
๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ผ๋ฉฐ enum ๋ฐ์ดํฐ ํ์
์ด๋ผ๊ณ ํ์๋ฉ๋๋ค. ๊ด๋ก๋ก ์ด๊ฑฐํ์
์ ์ ์ธํ๊ธฐ ์ํด์๋ JAVA Class ๋ช
์ฒ๋ผ ์ด๊ฑฐํ์
์ ์ด๋ฆ์ ์ ํ๊ณ ํ์
์ด๋ฆ์ผ๋ก ์ฒซ ๊ธ์ ๋๋ฌธ์๋ก ํ์ฌ .java ํ์ผ์ ์์ฑํฉ๋๋ค.
Enum๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
JAVA์์ ์ด๊ฑฐ ์์๋ ์์ ๊ฐ๊ฐ์ ๋ด๋ถ์ ์ผ๋ก public static final ํ๋์ด๋ฉด์ ๊ฐ์ฒด๋ก ์ ๊ณต๋๋๋ก ํฉ๋๋ค. static์ด ๋ถ์ด์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์์๋ ํด๋์ค๋ณ์๋ก ํด๋์ค๋ก๋๊ฐ ๋ก๋ ์์ ์ JVM Method์์ญ์ ํด๋น ํด๋์ค ๋ณ์๋ค์ ํญ์ ์์ฃผ์์ผ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋๊ธฐ ์ ์๋ ์ธ์ ๋ ์ง ๊ฐ์ ธ๋ค ์ธ ์ ์๋ ์ฃผ์๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค.
Enum๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ
Week today = Week.MONDAY;
Java
๋ณต์ฌ
Heap์์ญ์ Week ๊ฐ์ฒด๋ MONDAY๋ถํฐ SUNDAY๊น์ง ๊ฐ๊ฐ java.lang.Enumํด๋์ค๋ฅผ ์์๋ฐ๋ ๊ณ ์ ์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ณ Method ์์ญ์ ์ด๊ฑฐ์์๋ค์ ํด๋น Heap์์ญ์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ด
๋๋ค.
today๋ณ์๋ JVM Stack์์ญ์์ ์ฌ์ฉํ๋ฏ๋ก stack์์ญ์ today๋ Method ์์ญ์ ์๋ MONDAY์ ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ์ ๋ณต์ฌํ๋ฏ๋ก today์ Week.MONDAY๋ Heap์ ์์ฑ๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ด
๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ์ฑ๋ฆฝํฉ๋๋ค.
Week thisWeek = Week.SUNDAY;
Week nextWeek = Week.SUNDAY;
thisWeek == nextWeek // true
Java
๋ณต์ฌ
Enum ํ์ ์ ๋ฑ์ฅ ๋ฐ ์ฅ์
1.
์์์ ๋ฆฌํฐ๋ด์ด ๋
ผ๋ฆฌ์ ์ธ ์ฐ๊ด์ด ์์.
2.
์๋ก ๋ค๋ฅธ ๊ฐ๋
๋ผ๋ฆฌ ์ด๋ฆ์ด ์ถฉ๋ํ ์ ์์.
3.
์๋ก ๋ค๋ฅธ ๊ฐ๋
์์๋ ๋น๊ตํ๋ ์ฝ๋๊ฐ ๊ฐ๋ฅํจ
์ด์ฒ๋ผ ์์๋ฅผ ํด๋์ค๋ก ์ ์ํด์ ๊ด๋ฆฌํ ๋ ์ป์ ์ ์๋ ์ด์ ๋ค์ ๋ชจ๋ ์ทจํ๋ฉด์ ์์๋ค์ ๋์ฑ ๊ฐ๋จํ ์ ์ธํ ์ ์๋๋ก ํ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค.
Enum ํ์ ์ ์ ์ ๋ฐ ์ฌ์ฉ
Enum ํ์ ์ ์ ์ธ
public enum ํค์๋๋ ์ด๊ฑฐ ํ์
์ ์ ์ธํ๊ธฐ ์ํ ํค์๋์ด๋ค.
์ด๊ฑฐ ํ์
์ ์ ์ธํ๋ค๋ฉด ์ด์ ์ด๊ฑฐ ์์๋ฅผ ์ ์ธํ๋ฉด ๋๋ค. ์ด๊ฑฐ ์์๋ ์ด๊ฑฐ ํ์
์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋๋ฐ, ๊ด๋ก์ ์ผ๋ก ๋ชจ๋ ๋๋ฌธ์๋ก ์์ฑํ๋ค. ์ฌ๋ฌ ๋จ์ด์ผ ๊ฒฝ์ฐ๋ LOGIN_SUCCESS, LOGIN_FAILED์ ๊ฐ์ด _๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๊ด๋ก์ด๋ค.
public enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER
}
Java
๋ณต์ฌ
Enum ํ์ ์ ์ฌ์ฉ
Enum ํ์
๋ ํ๋์ ๋ฐ์ดํฐ ํ์
์ด๋ฏ๋ก ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ผํ๋ค.
// ์ด๊ฑฐํ์
๋ณ์;
Season season;
Season weddingSeason;
// ์ด๊ฑฐํ์
๋ณ์ = ์ด๊ฑฐํ์
.์ด๊ฑฐ์์;
Season weddingSeason = Season.AUTUMN;
// null์ ์ฌ์ฉ๋ ๊ฐ๋ฅ
Season season = null;
Java
๋ณต์ฌ
Enum์ด ์ ๊ณตํ๋ ๋ฉ์๋
java.lang.Enum
java.lang ์ ํฌํจ๋ Enum ํด๋์ค๋ ๋ชจ๋ ์๋ฐ ์ด๊ฑฐํ์ ์กฐ์์ด๋ค. ๋ชจ๋ ์ด๊ฑฐํ์ Enum ํด๋์ค๋ฅผ ์์๋ฐ๊ธฐ ๋๋ฌธ์ enum type์ ๋ณ๋์ ์์์ ๋ฐ์ ์ ์๋ค.
๋ฉ์๋๋ค์ ๋ชจ๋ java.lang.Enum ํด๋์ค์ ์ ์๋์ด ์๋ค. toString์ ์ ์ธํ ๋๋ถ๋ถ์ ๋ฉ์๋๋ final๋ก ์ ์ธ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ ์ ์๋ค.
name()
์ด๊ฑฐ ๊ฐ์ฒด์ ๋ฌธ์์ด ๋ฆฌํด
Season season = Season.SPRING;
String name = season.name();// "SPRING"
Java
๋ณต์ฌ
ordinal()
์ด๊ฑฐ ๊ฐ์ฒด๊ฐ ๋ช ๋ฒ์งธ์ธ์ง๋ฅผ ๋ฆฌํด
public enum Season {
SPRING,// 0
SUMMER,// 1
AUTUMN,// 2
WINTER// 3
}
Season season = Season.AUTUMN;
int ordinal = season.ordinal();// 2
Java
๋ณต์ฌ
compareTo()
๋งค๊ฐ๊ฐ์ผ๋ก ์ฃผ์ด์ง ์ด๊ฑฐ ๊ฐ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํ๋ก ๋ช ๋ฒ์งธ ์์นํ๋์ง ๋น๊ต
Season season1 = Season.SPRING;// 0
Season season2 = Season.WINTER;// 3int result1 = season1.compareTo(season2);// -3int result2 = season2.compareTo(season1);// 3
Java
๋ณต์ฌ
valueOf()
๋งค๊ฐ๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ ๋ฌธ์์ด๊ณผ ๋์ผํ ๋ฌธ์์ด์ ๊ฐ์ง๋ ์ด๊ฑฐ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค.์ธ๋ถ๋ก๋ถํฐ ๋ฌธ์์ด์ ๋ฐ์ ์ด๊ฑฐ ๊ฐ์ฒด๋ก ๋ณํํ ๋ ์ ์ฉํ๋ค.
Season season = Season.valueOf("SPRING")
Java
๋ณต์ฌ
values()
์ด๊ฑฐ ํ์
์ ๋ชจ๋ ์ด๊ฑฐ ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด ๋ฆฌํด
Season[] seasons = Season.values();
for(Season season : seasons) {
System.out.println(season);
}
Java
๋ณต์ฌ
EnumSet
EnumSet์ enum ํด๋์ค๋ก ์๋ํ๊ธฐ ์ํด ํนํ๋ Set ์ปฌ๋ ์
(๋ฐ์ดํฐ๋ฅผ ์ค๋ณต ์ ์ฅํ ์ ์๊ณ , ์์๊ฐ ๋ณด์ฅ๋์ง ์๋ ์๋ฃ๊ตฌ์กฐ)์ด๋ผ๊ณ ํ ์ ์๋ค. EnumSet์ Set ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ , AbstractSet์ ์์ํ๋ค. ์ด๋ฌํ EnumSet์ ๋ด๋ถ๋ ๋นํธ ๋ฒกํฐ๋ก ๊ตฌํ๋์๋ค.
EnumSet์ ์ค์ํ ํน์ง ๋ช ๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
โข
EnumSet์ AbstractSet ํด๋์ค๋ฅผ ์์ํ๊ณ Set ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
โข
์ค์ง ์ด๊ฑฐํ ์์๋ง์ ๊ฐ์ผ๋ก ๊ฐ์ง ์ ์๋ค. ๋ํ ๋ชจ๋ ๊ฐ์ ๊ฐ์ enum type์ด์ด์ผ ํ๋ค.
โข
null value๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋๋ค. NullPointerException์ ๋์ง๋ ๊ฒ๋ ํ์ฉํ์ง ์๋๋ค.
โข
ordinal ๊ฐ์ ์์๋๋ก ์์๊ฐ ์ ์ฅ๋๋ค.
โข
tread-safeํ์ง ์๋ค. ๋๊ธฐ์์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด Collections.synchronizedMap์ ์ฌ์ฉํ๊ฑฐ๋, ์ธ๋ถ์์ ๋๊ธฐํ๋ฅผ ๊ตฌํํด์ผํ๋ค.
โข
๋ชจ๋ ๋ฉ์๋๋ arithmetic bitwise operation์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ธฐ๋ณธ ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(1)์ด๋ค.