Week11(Enum)
Enum์ด๋?
์ด๊ฑฐ์ฒด๋ผ๊ณ ํด์ enumeration type์ด๋ค.
ํด๋์ค์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ์์
์์์ด๊ธฐ ๋๋ฌธ์ equalsํจ์๊ฐ ์๋ '=='๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค!!
์๋ก ๊ด๋ จ ์๋ ์์๋ค์ ๋ชจ์ ์ฌ๋ณผ๋ฆญํ ๋ช ์นญ์ ์งํฉ์ผ๋ก ์ ์ํ ๊ฒ
Enum ํด๋์คํ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํด๋์คํ ์ ์ธ
์๋ก์ด ์ด๊ฑฐํ์ ์ ์ธํ๋ฉด, ๋ด๋ถ์ ์ผ๋ก Enum ํด๋์คํ ๊ธฐ๋ฐ์ ์๋ก์ด ํด๋์คํ์ด ๋ง๋ค์ด์ง
์ฅ์
๋ฌธ์์ด๊ณผ ๋น๊ตํด์ ์๋์์ฑ, ์คํ๊ฒ์ฆ, ํ ์คํธ ๋ฆฌํฉํ ๋ง ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์ง์์ ๋ฐ๋ ๊ฒ์ด ๊ฐ๋ฅ
ํ์ฉ ๊ฐ๋ฅํ ๊ฐ๋ค์ ์ ํํ ์ ์์
์ด๊ฑฐ์ฒด๋ฅผ ๋น๊ตํ ๋ ์ค์ ๊ฐ๋ฟ๋ง ์๋๋ผ ํ์ ๊น์ง๋ ์ฒดํฌ
์ด๊ฑฐ์ฒด์ ์์ซ๊ฐ์ด ์ฌ์ ์๋๋๋ผ๋ ๋ค์ ์ปดํ์ผ ํ ํ์๊ฐ ์์
Enum์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
Java์์ enum(์ด๊ฑฐ ์์)๋ ์ ์ธํ๊ฒ ๋๋ฉด ๋ชจ๋๋ฅผ public static final๋ก ์์ฑํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ Static์ด๋ ํค์๋๊ฐ ๋ถ๊ธฐ ๋๋ฌธ์ static์ด ๋ถ์ ๊ฒ๋ค์ jvm์์์ method์์ญ์ ํ ๋น๋๊ฒ ๋๊ณ ํ๋ก๊ทธ๋จ์ด ๋๋ ๋์์๋ ์ํ๋ ๋๋ก ๊บผ๋ด์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
enum์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๋น์ทํ์ง๋ง, ๋ฐ๋ก new ํค์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง๋ ์๋๋ค.
enumํ์ ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ฒ ๋๋ค๋ฉด,
๊ทธ ์๊ฐ jvm์ heap ์์ญ์ ๋ชจ๋ enumํ์ ์ด ์์ฑ๋๊ฒ ๋๋ค. (heap์์ญ์ด๋ newํค์๋ ๋ฑ์ ํตํด ์๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ค์ด ๋ค์ด๊ฐ๋ ์์ญ์ด๋ค)
๊ทธ๋ฆฌ๊ณ method ์์ญ์ ์์ฑ๋ enum์ heap์์ญ์ ์์ฑ๋ ๊ฐ์ฒด๋ค์ด ํ ๋น๋๋ค.
๊ทธ๋ ๊ฒ๋๋ค๋ฉด, ์ค์ ๋ก ๊ฐ์ฒด๋ก์จ ์ฌ์ฉ๋๋ ๋ณ์๋ stack์ ๋ค์ด๊ฐ๊ฒ ๋๋๋ฐ stack์์ method์ ์๋ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์ค๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌ๋ฉด method์ heap ๋๋ค ๋ชจ๋ ๊ฐ์ heap์์ญ์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๊ฒ ๋๋ค!
Enum์ ์ ์ํ๋ ๋ฐฉ๋ฒ
์ฃผ์ : enum ์ด๊ฑฐํ์ผ๋ก ์ง์ ๋ ์์๋ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ง์ง๋ง์ ; ์ ๋ถํ์ง ์๋๋ค!
ํ๋์ ์๋ฐ ํ์ผ๋ก ๋ง๋ค์ด์ ์ ์ธ
ํ์ผ ์์ฑํ ๋ enumํ์ผ ์ ํํ๊ฒ๋๋ฉด ์๋์ class ์๋ฆฌ์ enum์ด ๋ค์ด๊ฐ
์ฌ์ฉํ ๋๋
Enum์ผ๋ก ์ ์ํ ๋ ์ฌ์ฉํ ์ด๋ฆ(subject) ์ String์ด๋ int์ ๊ฐ์ ํ์ ์ผ๋ก ๋๊ณ ์ฌ์ฉ
ํด๋์ค ์์์ ์ ์ธํ๊ธฐ
ํ์ํ ๋ enum ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ํ๋ ์์๋ค์ ์ง์ด๋ฃ์ด์ฃผ๊ณ ์ฌ์ฉ
ํด๋์ค ๋ฐ์์ ์ ์ธํ๊ธฐ
์ ์ธ์ ํ๊ณ ๋์ ์ฌ์ฉ์ ์ด๋ ๊ฒ ํ๋ค
๋ฐ์ดํฐ ํ์ ์ฒ๋ผ ์ ์ธํ๊ณ , enum์ด๋ฆ.enum์์ ๋ฐฉ์์ผ๋ก ๋ฃ์ด์ ์ฌ์ฉํ ์ ์๋ค
enum์ด ์ ๊ณตํ๋ ๋ฉ์๋
values() : ๋ชจ๋ enum์ ์์๋ค์ ๋ฐฐ์ด์ผ๋ก ์์ฑ
valuesํจ์๋ฅผ ์ด์ฉํด์ enum์ ์์๋ค์ ๋ชจ๋ ์ถ๋ ฅํ๋ ์์
valueOf() : ๋ฌธ์์ด๋ก enum ์์์ ์ด๋ฆ์ ์ฐพ์์ ์์์ ์ด๋ฆ์ ๋ฆฌํด
name() : ํธ์ถ๋ ๊ฐ์ ์ด๋ฆ์ String์ผ๋ก ๋ฆฌํด
ordinal() : ํด๋น ๊ฐ์ด enum์ด ์ ์๋ ์์๋ฅผ ์ ์๊ฐ์ผ๋ก ๋ฆฌํด
์ด๊ฒ์ ์ธ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๋ ํ๋ค
(์ฌ์ง์ด ์ฐพ์๋ณด๋๊น Most programmer๋ค์ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ์ฃผ์์ผ๋ก๋ ์ ํ์์๋ค!)
compareTo(E o ) : enum๊ณผ ์ง์ ๋ ๊ฐ์ฒด์ ์์๋ฅผ ๋น๊ต, ์ง์ ๋ ๊ฐ์ฒด๋ณด๋ค ์์ ๊ฒฝ์ฐ, ์์ ์ ์, ๋์ผํ๋ฉด 0, ํฌ๋ฉด ์์ ์ ์ ๋ฆฌํด
equals(Object other) : ์ง์ ๋ ๊ฐ์ฒด๊ฐ enum ์ ์์ ๊ฐ์๊ฒฝ์ฐ, true๋ฅผ ๋ฆฌํด
java.lang.Enum
Enum ํด๋์ค๋ ๋ชจ๋ ์๋ฐ ์ด๊ฑฐ์ฒด์ ๊ณตํต๋ ์กฐ์ ํด๋์ค
Enum ํด๋์ค์๋ ์ด๊ฑฐ์ฒด๋ฅผ ์กฐ์ํ๊ธฐ ์ํ ๋ค์ํ ๋ฉ์๋๊ฐ ์์
์ ์ผํ ์์ฑ์
protected Enum(String name, int ordinal) : ์ ์ผํ ์์ฑ์๋ก ํ๋ก๊ทธ๋๋จธ๋ ์ด ์์ฑ์๋ฅผ ํธ์ถํ ์ ์์
์ด๊ฑฐํ ์ ์ธ์ ๋ํ ์๋ต์ผ๋ก ์ปดํ์ผ๋ฌ์์ ๋ด๋ณด๋ธ ์ฝ๋๋ฅผ ์ฌ์ฉ
EnumSet
java.util์ ์กด์ฌํ๋ฉฐ, class EnumSet>์ด๋ ๊ฒ ์ ์ธํ๋ฉด์ ์ฌ์ฉํ๋ค
EnumSet์ ์ด๊ฑฐํ ์ ํ๊ณผ ํจ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ set๊ตฌํ์ฒด์ด๋ค.
๋ฐ๋ณตํ๋ ๋ฉ์๋์ ์ํด ๋ฆฌํด๋ ๋ฐ๋ณต๊ธฐ๋ ์ด๊ฑฐ ํ ์์๊ฐ ์ ์ธ๋ ์์๋ก ์์๋ฅผ ์ํํ๋ฉฐ, ๋ฆฌํด๋ ๋ฐ๋ณต๊ธฐ๋ ์ฝํ๊ฒ ์ผ๊ด์ฑ์ด ์์
Null ์์๋ ํ์ฉ๋์ง ์์ผ๋ฉฐ ๋ง์ฝ null ์์๋ฅผ ์ฝ์ ํ๋ ค๊ณ ํ๋ฉด NullPointerException์ด ๋ฐ์ํ๋ค. ๊ทธ๋ฌ๋ null์์๊ฐ ์๋์ง ํ ์คํธํ๋ ๋จ๊ณ๋ ์ ๊ฑฐํ๋ ค๋ ์๋๋ ๊ฐ๋ฅํ๋ค
EnumSet์ ๋๊ธฐํ๋์ง ์๋๋ค. ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ด๊ฑฐํ ์งํฉ์ ์ ๊ทผํ๊ณ ์ ์ด๋ ํ๋์ ์ค๋ ๋๊ฐ ์งํฉ์ ์์ ํ๋ ๊ฒฝ์ฐ์ ์ธ๋ถ์์ ๋๊ธฐํ๋์ด์ผ ํ๋ค.
๋ฉ์๋๋ค
allOf : ์ง์ ๋ ์์ ํ์ ์ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋ enum set์ ๋ง๋ฌ
noneOf : ์ง์ ๋ ์์ ํ์ ์ ์ฌ์ฉํ์ฌ ๋น enum set์ ๋ง๋ฌ
Type Safety
tip) ๊ฐ์ ๋งค๊ธฐ๊ณ ์์๋ฅผ ์ ํ ๋๋ 1,2,3... ์ด๋ ๊ฒ ๊ฐ๋๊ฒ์๋๋ผ 10,20,30 ์ด๋ ๊ฒ ์์๋ฅผ ๋งค๊ธฐ๋ฉด ํธํ๋ค! => ์ฌ์ด์ ๊ฐ์ ์ถ๊ฐํ ์ผ์ด ์๊ธธ๊ฒ์ด๊ธฐ ๋๋ฌธ์!
์ฐธ๊ณ
https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html
https://www.opentutorials.org/module/1226/8025
Last updated
Was this helpful?