์ต๊ทผ์ ์ฑ๊ธํค ๋์์ธ ํจํด , Java์์ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ ๋ฐ ์ฉ๋์ ๋ํด ์์ธํ ์ดํด๋ณด์์ต๋๋ค. ๊ทธ๋ฌ๋ Java๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฒด ์ฑ๊ธํค๊ณผ ํจ๊ป ์ ๊ณต๋๋ค๊ณ ๋งํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น? ํฅ๋ฏธ๊ฐ ์์ต๋๊น? ๊ทธ๋ผ ๋ค์ด๋นํฉ์๋ค.
์ด๋ฏธ Enum ํด๋์ค ์ ๋ํด ์๊ณ ์์ ๊ฒ์ ๋๋ค . ๊ทธ๊ฒ์ ๋น์ ์ด ์์์ผ ํ ํน๋ณํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ํนํ Enum์ ์ฑ๊ธํค ๋์์ธ ํจํด์ ๊ตฌํํฉ๋๋ค. ์ด ์ต์ ์ ๊ณต์ฉ ํ๋ ์ ๊ด๋ จ๋ ์ฑ๊ธํค ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ฑฐ์ ๋์ผํฉ๋๋ค .
์ด๊ฑฐํ์ผ๋ก์์ ์ฑ๊ธํค:
public enum Device {
PRINTER
}
๊ณต์ฉ ๋ณ์๋ก์์ ์ฑ๊ธํค:
public class Printer {
public static final Printer PRINTER = new Printer();
private Printer() {
}
//โฆ
}
์ด๊ฑฐ ํ ์ ๊ทผ ๋ฐฉ์์ ์์ฒด ๊ตฌํ์ ์์ฑํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐ ํ๋ ์ ๊ทผ ๋ฐฉ์๋ณด๋ค ๋ ๊ฐ๊ฒฐํฉ๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ด๊ฑฐํ์ด ์ง๋ ฌํ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด๊ฑฐํ์ ์ง๋ ฌํ๋ ์ผ๋ฐ ๊ฐ์ฒด์ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ์ด๊ฑฐํ ์ด๋ฆ์ ๊ฐ๋ง ์ง๋ ฌํ๋ฉ๋๋ค. ์ญ์ง๋ ฌํ ์ค์ ๋ฉ์๋๋ ์ญ์ง๋ ฌํ๋ ์ด๋ฆ๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ํ enum์ ๋ฐ์ฌ ๊ณต๊ฒฉ ์ผ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ ์ ์์ต๋๋ค .
Reflection API๋ฅผ ์ดํด๋ณด๋ ๋ ๋ฒ์งธ ๋ชจ๋์ ์์ ์์ ๋ฆฌํ๋ ์ ์ ๋ํด ์์ธํ ์์๋ณผ ๊ฒ์ ๋๋ค . |
Java๋ enum์ ์ธ์คํด์คํ๋ฅผ ๊ธ์งํฉ๋๋ค. ์ด๋ Constructor ํด๋์ค์ newInstance ๋ฉ์๋ ๊ตฌํ ์ ์ ์ฉ๋ ์ ํ ์ฌํญ์ผ๋ก , ๋ฆฌํ๋ ์ ์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์์ฃผ ํธ์ถ๋ฉ๋๋ค.
Constructor.newInstance ์์ ๋ฐ์ทํ ์ฝ๋ . ์ด๊ฑฐํ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค .
if ((clazz.getModifiers() & Modifier.ENUM) != 0)
throw new IllegalArgumentException("Cannot reflectively create enum objects");
์ด๊ฑฐํ์ ์ฌ์ฉํ์ฌ ์ฑ๊ธํค์ ๋ง๋๋ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
๊ฐ์ฒด๊ฐ ์ฆ์ ์์ฑ๋๊ณ ์ด๊ธฐํ๋ฅผ ์ง์ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ง์ฐ ์ด๊ธฐํ๊ฐ ๋ถ์กฑํฉ๋๋ค.
-
๋ค๋ฅธ ํด๋์ค๋ ํ์ฅํ ์ ์์ต๋๋ค. ์ฆ, ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๊ฑฐ ํ์ ์ฑ๊ธํค์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์๋ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ ์ ๋ฉ์๋ ๋๋ ๊ณต์ฉ ๋ณ์์ ๊ฐ์ด ์ด๋ฏธ ์ต์ํ ๋ค๋ฅธ ๊ตฌํ ์ต์ ์ผ๋ก ์ ํํด์ผ ํฉ๋๋ค.
-
enum์ ์ฑ๊ธํค์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ๋์ enum ํ๋ ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค .
public enum Device extends Electricity {
PRINTER
}
์ด ์ฝ๋๋ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
๊ทธ๋ฌ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ enum์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ฐ ์์ต๋๋ค .
public enum Device implements Electricity {
PRINTER
}
์์์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค๋ฉด enum ์ ํตํด ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค . ์ด๊ฒ์ ๊ถ์ฅํ๋ ๊ฒ์ ์ฐ๋ฆฌ๋ง์ด ์๋๋๋ค. Joshua Bloch ์์ ๋ ๊ถ์ฅํฉ๋๋ค .
์ด ๊ตฌํ ๋ฐฉ์์ ํธ๋ฆฌํจ, ์ํํ, ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ง๋ ฌํ, ๋ฐ์ฌ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ์ ๋ณดํธ, ๊ณ ์ ์ฑ ๋ฑ ์ข์ ์ฑ๊ธํค์ ํ์ํ ๋ชจ๋ ๊ฒ์ ์ ๊ณตํฉ๋๋ค!
GO TO FULL VERSION