Week 11
2022. 8. 20. 22:00
728x90
목표
자바의 열거형에 대해 학습하세요.
학습할 것
- enum 정의하는 방법
- enum이 제공하는 메소드 (values()와 valueOf())
- java.lang.Enum
- EnumSet
1. enum 정의하는 방법
열거형(enum)은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 원래 자바는 C언어와 달리 열거형이라는 것이 존재하지 않았으나 JDK1.5부터 새로 추가되었다. 자바의 열거형은 C언어의 열거형보다 더 향상된 것으로 열거형이 갖는 값뿐만 아니라 타입도 관리하기 때문에 보다 논리적인 오류를 줄일 수 있다.
enum 열겨헝이름 { 상수명1, 상수명2, ...}
2. enum이 제공하는 메소드 (values()와 valueOf())
values()는 열거형의 모든 상수를 배열에 담아 반환한다. 이 메서드는 모든 열거형이 가지고 있는 것으로 컴파일러가 자동으로 추가해 준다. 그리고 ordinal()은 모든 열거형의 조상인 java.lang.Enum클래스에 정의된 것으로, 열거형 상수가 정의된 순서(0부터 시작)를 정수로 반환한다. valueOf()는 열거형 상수의 이름으로 문자열 상수에 대한 참조를 얻을 수 있게 해준다.
1. values()
Direction[] dArr = Dircetion.values();
for(Direction d : dArr) //for(Direction d : Direction.values())
System.out.printf("%s = %d%n", d.name(), d.ordinal());
2. valueOf(String name)
Direction d = Direction.valueOf("WEST");
System.out.println(d); //WEST
System.out.println(Direction.WEST == Direction.valueOf("WEST")); //true
3. java.lang.Enum
모든 열거형의 조상이다.
Class<E> getDeclaringClass() -> 열거형의 Class객체를 반환한다.
String name() -> 열거형 상수의 이름을 문자열로 반환한다.
int ordinal() -> 열거형 상수가 정의된 순서를 반환한다.(0부터 시작)
T valueOf(Class<T> enumType, String name) -> 지정된 열거형에서 name과 일치하는 열거형 상수를 반환한다.
4. EnumSet
EnumSet은 열거형과 함께 사용하기 위한 Set 인터페이스의 특수한 구현 중 하나이다. EnumSet의 몇 가지 중요한 기능은 다음과 같다
1. AbstractSet 클래스를 확장 하고 Java에서 Set Interface 를 구현합니다.
2. EnumSet 클래스는 Java Collections Framework 의 멤버이며 동기화되지 않습니다.
3. HashSet 보다 훨씬 빠른 고성능 집합 구현 입니다.
4. EnumSet의 모든 요소 는 집합이 명시적으로 또는 암시적으로 생성될 때 지정 되는 단일 열거형 에서 가져와야 합니다 .
5. null 개체 를 허용하지 않으며 그렇게 하면 NullPointerException 이 발생합니다.
6. 안전 장치 반복자를 사용 하므로 반복하는 동안 컬렉션이 수정되는 경우 ConcurrentModificationException 이 발생하지 않습니다.
------------------------------------------------------------------------
Enumset의 **계층 구조**
java.lang.Object
↳ java.util.AbstractCollection<E>
↳ java.util.AbstractSet<E>
↳ java.util.EnumSet<E>
------------------------------------------------------------------------
enum Gfg { CODE, LEARN, CONTRIBUTE, QUIZ, MCQ };
// Main class
// EnumSetExample
public class GFG {
// Main driver method
public static void main(String[] args) {
// Creating a set
EnumSet<Gfg> set1, set2, set3, set4;
// Adding elements
set1 = EnumSet.of(Gfg.QUIZ, Gfg.CONTRIBUTE,
Gfg.LEARN, Gfg.CODE);
set2 = EnumSet.complementOf(set1);
set3 = EnumSet.allOf(Gfg.class);
set4 = EnumSet.range(Gfg.CODE, Gfg.CONTRIBUTE);
// Printing corresponding elements in Sets
System.out.println("Set 1: " + set1);
System.out.println("Set 2: " + set2);
System.out.println("Set 3: " + set3);
System.out.println("Set 4: " + set4);
}
}
set1: [CODE, LEARN, CONTRIBUTE, QUIZ]
set2: [MCQ]
set3: [CODE, LEARN, CONTRIBUTE, QUIZ, MCQ]
set4: [CODE, LEARN, CONTRIBUTE]
'Java & Spring > WhiteShip Study' 카테고리의 다른 글
Week 13 (0) | 2022.09.03 |
---|---|
Week 12 (0) | 2022.08.27 |
Week 10 (0) | 2022.08.13 |
Week 09 (0) | 2022.08.06 |
Week 08 (0) | 2022.07.30 |