[TIL] Java - 열거체(enumeration type) 활용하기

phdljr·2024년 3월 8일
0

TIL

목록 보기
67/70

보통 Java 개발을 하다보면 상수 인스턴스를 enum으로 구현해서 사용하는 경우가 많다.

이러한 용도 말고도 어떻게 enum을 활용할 수 있는지 알아보는 시간을 가져보겠다.

enum이란?

  • 상수 그룹을 나타내는 특수 클래스
  • 클래스지만 런타임시 미리 정해진 인스턴스로만 구성된 집합체
    • 런타임시에 인스턴스가 새로 생성될 수 없다.
  • 일반 클래스처럼 필드, 메소드를 가질 수 있다.
  • 클래스나 다른 enum을 상속받을 수 없다.
    • 인터페이스를 구현할 순 있다.
enum Level {
    LOW(1),
    MEDIUM(3),
    HIGH(5);

    private int num;

    Level(int num){
        this.num = num;
    }

    public int getNum(){
        return num;
    }
}

활용 방법

상수 인스턴스

  • 클래스의 인스턴스처럼 상태를 가지는 대신, 불변의 상태값을 가지도록 한다.
enum Level {
    LOW(1),
    MEDIUM(3),
    HIGH(5);

    private final int num;

    Level(int num){
        this.num = num;
    }

    public int getNum(){
        return num;
    }
}

Singleton

  • Double-Checked-Locking을 통해서 인스턴스의 생성을 막기 보단, enum을 활용한다.
public class Singleton {

	private static Singleton instance;
	private Singleton(){}
	
	public static Singleton getInstance() {
		if(instance == null) {
			synchronized (Singleton.class) {
				if(instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}
public enum Singleton {
	SINGLETON
}

enum을 순회할 시, EnumSet을 활용

  • values() 를 통해서 배열을 순회하는것이 아닌, iterable 형식으로 조회할 수 있다.
import java.util.EnumSet;

enum Level {
    LOW(1),
    MEDIUM(3),
    HIGH(5);

    private int num;

    Level(int num){
        this.num = num;
    }

    public int getNum(){
        return num;
    }
    
    static Set<Level> getAll() {
    	return EnumSet.allOf(Level.class);
    }
}

class Test {
    public static void main(String[] args) {
        Level.getALl()
        	.forEach(System.out::println);
    }
}

참조

https://www.w3schools.com/java/java_enums.asp
https://techblog.woowahan.com/2527/
https://www.youtube.com/watch?v=jVJboEeX5Wg

profile
난 Java도 좋고, 다른 것들도 좋아

0개의 댓글