흔히 final static string 과 같은 방식으로 상수를 정의한다. 하지만 상수를 정의해서 코딩하는 경우 다양한 문제가 발생된다. 이 문제점을 보완하기 위해 자바 1.5버전부터 새롭게 추가된 것이다.
Enum 은 열거형이라 불리며, 서로 연관된 상수들의 집합을 의미한다.
Eunm의 장점
public eunm class {
a, b, c
}
Eunm 특징
java.lang.Enum 클래스
Enum 클래스는 모든 자바 열거체의 공통된 조상 클래스이다.
Enum 클래스는 열거체를 조작하기 위한 다양한 메소드가 포함되어 있다.
대표적으로 values(), ordinal(), valiueOf() 3가지가 있다.
Static methods
values() : string 값을 enum에서 가져온다. 값이 없으면 예외 발생
valueOf() : 넘겨받은 class에서 string 찾아, enum에 가져온다.
values() : enum의 요소들을 순서대로 enum타입의 배열로 리턴.
Static이 아닌 methods
name() : 호출된 값의 이름을 String으로 리턴.
ordinal() : 해당 값이 enum에 정의된 순서를 리턴.
compareTo() : Enum과 지정된 객체의 순서를 비교. 지정된 객체보다 작은 경우 음의정수, 동일하면 0, 크면 양의 정수 리턴
equals() : 지정된 객체가 enum 정수와 같은 경수, true를 리턴.
enum class를 작동하기 위해 특화된 Set collection이라고 한다. enumset은 set 인터페이스를 구현하고, abstractset을 상속한다.
사용시 고려사항
EnumSet은 추상 클래스이며, 인스턴스 생성을 위한 다양한 정적 팩토리 메서드가 정의되어 있다. JDK에서는 RegularEnumSet, JumboEnumSet 2가지의 EnumSet 구현체를 제공한다.
EnumSet 사용하기
EX.
public enum Color{
RED, YELLOW , BLUE
}
EunmSet<Color> set = EnumSet.allof(color.class);
set.forEach(system.out::println);
실행결과.
RED
YELLOW
BLUE
noneOf()를 사용하면 빈 Color 컬렉션을 갖는 EnumSet을 만들 수 있다.
of()를 사용하면, 들어갈 요소를 직접 입력하여 EnumSet을 생성할 수 있다.
complementOf()를사용하면, 원하는 요소를 제거하고 EnumSet을 생성할 수 있다.
copyOf()를 사용하면 다른 EnumSet의 모든 요소를 복사하여 EnumSet을 만들 수 있다.
add()를 사용하면 EnumSet에 요소를 추가할 수 있다.
contains()를 사용하면 특정 요소가 EnumSet에 포함되어 있는지 확인할 수 있다.
remove()를 사용하면 EnumSet에서 특정 요소를 제거할 수 있다.
EnumSet 사용의 장점
EnumSet의 모든 메서드는 산술 비트 연산을 사용하여 구현되므로 일반적인 연산이 매우 빠르게 계산된다.
EnumSet은 HashSet 같은 다른 Set 구현체와 비교했을 때, 데이트가 예상 가능한 순서로 저장되어 있고, 각 계산을 하는데 하나의 비트만이 필요하므로 더 빠르다고 할 수 있다. 비트 벡터의 특성상 더 작은 메모리를 사용한다.
래퍼런스
https://limkydev.tistory.com/50
https://limkydev.tistory.com/66
http://www.tcpschool.com/java/java_api_enum
https://scshim.tistory.com/253