enum 정의하는 방법
1) enum 이란?
서로 관련된 상수를 편하게 선언하기 위한 것으로 상수를 여러개 정의할 때 사용한다.
즉 서로 연관된 상수들의 집합이다.
기존에 상수를 정의하는 방법이였던 final static string과 같이 문자열이나 숫자들을 나타내는 기본 자료형의 값을 enum 을 이용해서 같은 효과를 낼 수 있다.
2) enum의 장점
- 코드가 단순해지고 가독성이 좋아진다.
- 인스턴스 생성과 상속을 방지하여 상수값의 타입안정성이 보장된다.
- enum class 를 사용해 새로운 상수들의 타입을 정의함으로 정의한 타입 이외의 타입을 가진 데이터값을 컴파일시 체크한다.
- 키워드 enum 을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.
3) 정의 방법
enum 열거형 이름 {
상수명 1, 상수명2 , 상수명n
}
ex)
public class Main {
enum Fruit{
apple,banana,orange,grape;
}
public static void main(String[] args) {
Fruit f;
System.out.println(Fruit.apple.ordinal());
System.out.println(Fruit.banana.ordinal());
System.out.println(Fruit.orange.ordinal());
System.out.println(Fruit.grape.ordinal());
}
}
실행 결과)
enum에서 정의된 상수를 사용하는 방법 : 열거형이름.상수명 -> 클래스 static 변수를 참조하는 것과 같다.
enum이 제공하는 메소드 (values()와 valueOf())
https://docs.oracle.com/javase/8/docs/api/index.html
Java Platform SE 8
docs.oracle.com
values() : 이 메소드는 해당 enum 타입에 정의된 상수 배열을 반환한다.
enum 의 모든 상수들을 배열로 만들어준다
Fruit[] arr = Fruit.values();
ex)
public class Main {
enum Fruit{
apple,banana,orange,grape;
}
public static void main(String[] args) {
Fruit[] f = Fruit.values();
for(Fruit fruits : f ){
System.out.println(fruits);
}
}
}
실행 결과)
위 코드와 실행결과와 같이 values()는 모든 상수들을 배열로 만들어 주는 것을 볼 수 있다.
valueOf() : 지정된 열거형에서 name과 일치하는 열거형 상수를 반환한다.
Fruit f = Fruit.valueOf("apple");
Fruit.apple == Fruit.valueOf("apple"); //true 반환
ex)
public class Main {
enum Fruit{
apple,banana,orange,grape;
}
public static void main(String[] args) {
Fruit a = Enum.valueOf(Fruit.class, "apple");
Fruit b = Fruit.valueOf("banana");
System.out.println(a);
System.out.println(b);
}
}
실행 결과)
그 외에도 나머지 메소드는 위 링크를 참조하면 된다.
java.lang.Enum
Enum 클래스는 모든 자바 언어 열거 타입의 상위 클래스이며 추상 클래스이다.
abstract 클래스로 인스턴스를 생성할 수 없다.
인스턴스의 생성을 막고자 추상클래스를 선언했기 때문에 abstract 메소드가 존재하지 않는다.
또한 선언하는 enum 타입은 enum 클래스를 자동으로 상속하여 enum 에 제공하는 ordinal과 같은 변수 및 메소드를 사용할 수 있게 된다.
EnumSet
참조 : https://docs.oracle.com/javase/8/docs/api/index.html
Java Platform SE 8
docs.oracle.com
java.util 패키지 클래스로 set 인터페이스를 기반으로 열거형 타입으로 지정해놓은 요소들을 가장 쉽고 빠르게 배열처럼 요소들을 다룰 수 있는 기능을 제공한다. HashSet과 비교했을 때 성능 상 더 좋기 때문에 열거형 데이터를 위한 Set이 필요할 때는 EnumSet을 사용하는 것이 좋다.
특징 )
- EnumSet 은 AbstractSet 클래스를 상속하고 Set 인터페이스를 구현한다.
- 오직 열거형 상수만을 값으로 가질 수 있고 모든 값은 같은 enum 타입이여야 한다.
- null 요소를 삽입할 수 없다. - NullPointException 발생
- ordinal 값의 순서대로 요소가 저장된다.
- EnumSet은 동기화가 되지 않는다 -> thread-safe 하지 않는다.
- 모든 메소드는 arithmetic bitwise operation을 사용하므로 모든 기본 연산의 시간 복잡도가 O(1)이다..
- EnumSet의 내부는 추상 클래스이므로 객체로써 생성 및 사용이 불가능하다. -> new 연산자 사용 불가
ex)
import java.util.EnumSet;
public class Main {
enum Fruit{
apple,banana,orange,grape;
}
public static void main(String[] args) {
EnumSet<Fruit> set1,set2,set3,set4;
set1 = EnumSet.allOf(Fruit.class);
set2 = EnumSet.of(Fruit.apple, Fruit.banana,Fruit.grape);
set3 = EnumSet.complementOf(set2);
set4 = EnumSet.range(Fruit.orange, Fruit.grape);
System.out.println("set1 : "+ set1);
System.out.println("set2 : "+ set2);
System.out.println("set3 : "+ set3);
System.out.println("set4 : "+ set4);
}
}
실행 결과)
참고 자료
https://codingwell.tistory.com/77
[Java] enum(열거형)
enum(열거형)이란, 서로 관련된 상수를 편하게 선언하기 위한 것으로 상수를 여러개 정의해야 할 때 사용한다. 즉, 서로 연관된 상수들의 집합이다. 수많은 언어는 사용자들이 새로운 열거형을 정
codingwell.tistory.com
https://eatnows.tistory.com/91
Enum이란?
Enum이란? enum이란 enumerated type의 줄임말로 열거형이라고 부르기도 하는데 컴퓨터 프로그래밍에서 열거형(enumerated type, enumeration)은 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다.
eatnows.tistory.com
'🦁아기사자' 카테고리의 다른 글
[Java] I/O (0) | 2025.03.31 |
---|---|
[Java] 애노테이션 (0) | 2025.03.27 |
[Java] 멀티스레드 프로그래밍 (0) | 2025.03.25 |
[Java] 인터페이스 (0) | 2025.03.20 |
[Java] 패키지 (0) | 2025.03.19 |