[Java]Enum

정석용·2023년 4월 13일
0

Java

목록 보기
11/15
post-thumbnail

Enum

흔히 final static string 과 같은 방식으로 상수를 정의한다. 하지만 상수를 정의해서 코딩하는 경우 다양한 문제가 발생된다. 이 문제점을 보완하기 위해 자바 1.5버전부터 새롭게 추가된 것이다.
Enum 은 열거형이라 불리며, 서로 연관된 상수들의 집합을 의미한다.

Eunm의 장점

  • 코드가 단순해지며, 가독성이 좋다.
  • 인스턴스 생성과 상속을 방지하여 상수 값의 타입 안정성이 보장된다.
  • enum class를 사용해 새로운 상수들의 타입을 정의함으로 정의한 타입 이외의 타입을 가진 데이터 값을 컴파일시 체크한다.
  • 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.
public eunm class {
	a, b, c
}

Eunm 특징

  • 열거형으로 선언된 순서에 따라 0부터 인덱스 값을 가진다. 순차적으로 증가된다.
  • eunm 열거형으로 지정된 상수들은 모두 대문자로 선언
  • 마지막에 열거형 변수들을 선언한 후 세미콜론은 찍지 않는다.

Enum 메소드

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를 리턴.

EnumSet

enum class를 작동하기 위해 특화된 Set collection이라고 한다. enumset은 set 인터페이스를 구현하고, abstractset을 상속한다.

사용시 고려사항

  • 열거형 값만 포함 할 수 있으며, 모든 값은 동일한 열거형이어야 한다.
  • null을 추가할 수 없다.
  • 스레드에 안전하지 않으므로, 필요한 경우 외부에서 동기화한다.
  • 복사본에 fail-safe0iterator를 사용하여 컬렉션을 순회할 때, 컬렉션이 수정되어도 ConcurrentModificationException이 발생하지 않는다.

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

profile
오늘도 성장중

0개의 댓글