취뽀몽

[Java] Enum 클래스 본문

java

[Java] Enum 클래스

허몽구 2023. 11. 27. 10:15

진행 중인 프로젝트가 있는데, 하드코딩을 피하기 위해 조언 들은 것이 Enum 클래스였다.

듣긴 들었어도 코드에 적용시킨 적은 없는 것 같아 공부했던 것을 정리하고자 한다.

 

1. Enum 클래스

Enum 클래스란 특별한 유형의 클래스로서, 일련의 상수를 정의하는데 사용된다.

Enum은 '열거'를 의미하는데, 이는 상수의 집합을 정의하고 관리한다. 

 

2. Enum 클래스의 특징

1) Enum 클래스는 불변이다. 즉, enum 상수는 한 번 생성되면 변경할 수 없다.

2) Enum 상수는 컴파일 타임 상수이므로, 런타임동안 변경할 수 없다.

3) Enum 클래스는 자동으로 Serializable과 Comparable 인터페이스를 구현하므로, enum 상수는 직렬화 및 비교를 지원한다.

 

3. Enum 클래스 선언 방법

Enum  클래스는 클래스의 외부, 내부 둘 다 선언 가능하다.

자주 사용되며 반복되는 코드는 외부에 선언하고, 한 번 사용할 코드는 내부에 선언하는 것이 좋다.

 

public enum UserStatus { // 외부 선언
    ACTIVE,
    INACTIVE,
    BANNED
}

public class Example { // 내부 선언
    public enum UserStatus {
       ACTIVE,
       INACTIVE,
       BANNED
    }
}

 

위와 같이 선언하면 된다. 그럼 사용 방법을 알아보자.

 

4. Enum 클래스 사용 방법

public class Example {

    public String name;
    public UserStatus status;

    public static void main(String[] args) {
        Example example = new Example();
        
        example.name = "jiyoung";
        example.status = UserStatus.ACTIVE;
        
        System.out.println(example.name); // jiyoung
        System.out.println(example.status); // ACTIVE
    }
}

 

위와 같이 값을 지정해줄 수 있다.

하나의 클래스가 아닌 여러 클래스에서 같은 코드를 사용해야할 때 유용하게 사용할 수 있다.

 

5. Enum 클래스의 메소드

String name() 해당 열거체 상수의 이름 반환
static E values() 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환
static E valueOf(String name) 전달된 문자열과 일치하는 해당 열거체의 상수를 반환
int ordinal() 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환
protected void finalize() 해당 Enum 클래스가 final 메소드를 가질 수 없게 됨

 

사용 방법은 다음과 같다.

 

1) name

UserStatus status = UserStatus.ACTIVE; 
String name = status.name(); // "ACTIVE"

 

2) values

enum UserStatus {
    ACTIVE,
    INACTIVE,
    BANNED
}

public class Example {
    
    public static void main(String[] args) {
        for (UserStatus status : UserStatus.values()) {
            System.out.println(status); // ACTIVE, INACTIVE, BANNED 차례대로 출력 
        }
    }
}

 

3) valueOf

enum UserStatus {
    ACTIVE,
    INACTIVE,
    BANNED
}

public class Example {
    public static void main(String[] args) {
        UserStatus status = UserStatus.valueOf("BANNED");
        System.out.println(status);
    }
}

 

4) ordinal

enum UserStatus {
    ACTIVE,
    INACTIVE,
    BANNED
}

public class EnumExample {
    public static void main(String[] args) {
        UserStatus status = UserStatus.INACTIVE;
        System.out.println(status.ordinal()); // 1 (0부터 시작하기 때문)
    }
}

 

5) compareTo

UserStatus status1 = UserStatus.ACTIVE; // 0 
UserStatus status2 = UserStatus.BANNED; // 2 
int result1 = status1.compareTo(status2); // -2 
int result2 = status2.compareTo(status1); // 2

 


 

Enum은 이론만 알고 잘 사용하지 않는 클래스였는데, 이번 기회에 공부하며 어떻게 사용하면 편리할지에 대해 고민할 수 있었다.

코드 내에 일일이 하드코딩하지 말고 Enum 클래스를 사용하는 습관을 들이자 😂👩🏻‍💻

'java' 카테고리의 다른 글

[Java] 쓰레드 풀(Thread Pool)  (0) 2024.01.10
[Java] Optional  (0) 2024.01.01
[Java] try-with-resources  (0) 2023.11.13
[Java] 함수형 인터페이스 (Functional Interface)  (0) 2023.10.21
[Java] Checked Exception과 Unchecked Exception  (0) 2023.10.11