문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
|
java:enum [2016/03/21 23:18] kwon37xi 만듦 |
java:enum [2022/11/02 09:59] (현재) kwon37xi [Java enum] |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== Java enum ====== | ====== Java enum ====== | ||
| + | ===== name() 기반 조회가 많을 경우 ===== | ||
| + | * '' | ||
| + | <code java> | ||
| + | public enum MyEnum { | ||
| + | BAR, | ||
| + | BAZ; | ||
| + | // 외부에서는 MAP에 접근이 불가능해야한다. | ||
| + | private static final Map< | ||
| + | |||
| + | public static MyEnum fromName(String name){ | ||
| + | return MAP.get(name); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | https:// | ||
| ===== 자기 참조 enum - Self referential enum ===== | ===== 자기 참조 enum - Self referential enum ===== | ||
| enum이 enum 생성자에서 동일 enum의 다른 값을 참조해야하는 경우가 발생할 수 있는데, 아직 초기화가 안된 다른 값을 참조하는 것은 문법적으로 불가하다. | enum이 enum 생성자에서 동일 enum의 다른 값을 참조해야하는 경우가 발생할 수 있는데, 아직 초기화가 안된 다른 값을 참조하는 것은 문법적으로 불가하다. | ||
| 줄 59: | 줄 74: | ||
| A, B, Y, Z; | A, B, Y, Z; | ||
| + | // 외부에서 접근, 변경 불가능하도록 private으로 선언. | ||
| private static final Map< | private static final Map< | ||
| - | static | + | static { |
| - | | + | opposites = new EnumMap<> |
| - | opposites = new EnumMap<Flippable, Flippable> | + | |
| opposites.put(A, | opposites.put(A, | ||
| opposites.put(B, | opposites.put(B, | ||
| 줄 71: | 줄 86: | ||
| // 모두 올바르게 값 설정이 되었는지 검증 | // 모두 올바르게 값 설정이 되었는지 검증 | ||
| for (Flippable f : Flippable.values()) { | for (Flippable f : Flippable.values()) { | ||
| - | if (f.flip().flip() != f) | + | if (f.flip().flip() != f) { |
| - | | + | |
| throw new IllegalStateException(" | throw new IllegalStateException(" | ||
| } | } | ||
| 줄 78: | 줄 92: | ||
| } | } | ||
| - | public Flippable flip() | + | public Flippable flip() { |
| - | | + | |
| return opposites.get(this); | return opposites.get(this); | ||
| } | } | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | ==== 문자열 사용 ==== | ||
| + | 생성자에서 enum이 아닌 enum을 나타내는 문자열을 받아서 나중에 메소드 호출시 이것을 enum 값으로 변경해주는 방법도 있다. 별로 추천하고 싶지 않음. | ||
| + | |||
| + | |||