개발/1일1문제해결

[Java] Enum 클래스 실무 활용기 1 (with JavaScript)

Gamii 2024. 12. 9. 18:48
728x90

 

 

 

 

 

 

 

Enum 클래스를 언제 사용해야하는지 예전에 고민이 많았었는데, 리팩토링을 하면서 활용할 곳들이 많이 보인다.   

 

 

 

Enum 클래스를 활용하는 방법들을 하나씩 정리하려고 한다.

 

 

 

 

 

 

[게시판 CRUD]

 

게시판에서 CRUD 작업을 처리할 때 Enum을 활용할 수 있다.

 

 

 

1. CRUD 작업에 해당하는 값들인 CREATE, READ, UPDATE, DELETEEnum 클래스에 정의한다.

public enum ActionType {
    CREATE("C"),
    READ("R"),
    UPDATE("U"),
    DELETE("D");
    
    private String value;
	
    private ActionType(String value) {
        this.value = value;
    }

    public String getCode() {
        return value;
    }

    public static ActionType fromCode(String code) {
        for (ActionType action : ActionType.values()) {
            if (action.getCode().equals(code)) {
                return action;
            }
        }
        throw new IllegalArgumentException("No action found for code: " + code);
    }
}

 

 

 

 

 

2. 웹에서 사용자가 선택한 값을 Enum에 정의된 값으로 보낸다.

(아래 예시는 Javascript로 작성)

 

function action(){
    fetch('/mail/actionMail.do', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
            "action" : "INSERT"   // 여기에 Enum 타입을 적는다
        }),
    });
    //생략
}

 

 

 

 

 

 

3. 서버에서는 해당 값이 MailDTO의 ActionType.INSERT와 같이 매핑되어 값이 들어온다.

 

import lombok.Data;

@Data
public class MailDTO {
    private ActionType action;
}

 

 

@RequestMapping("actionMail.do")
public @ResponseBody ResponseBean actionMail(@RequestBody MailDTO MailDTO) {
    
    ...
    // 1. Enum Class인 ActionType으로 받음 
    ActionType action = MailDTO.getAction();

    // 2. Enum Class로 switch문 사용 가능
    switch(action) {
        case CREATE :
            ...
        case READ :
            ...
        case UPDATE :
            ...
        case DELETE :
            ...
    ...
}

 

 

 

Enum으로 값을 관리하면 switch문에서 Enum 상수를 직접 사용할 수 있다.

 

 

 

 

이를 통해 코드의 가독성이 높아지고,

 

값이 변경되더라도 Enum에 정의된 값만 수정하면 되므로 유지보수가 용이해진다.

 

 

 

 

또한, Enum을 사용하면 값이 잘못 입력되는 실수를 방지할 수 있으며,

 

코드에서 상수의 의미를 명확히 전달할 수 있다.