[RestAPI 개발기] 10. Enum

편준민's avatar
May 12, 2025
[RestAPI 개발기] 10. Enum
💡
서로 관련 있는 상수들을 하나의 그룹으로 묶어 관리할 수 있게 해주는 자료형

1. Enum을 사용하면 좋은 상황

예시로 Apply 클래스에 데이터를 집어 넣으려고 할 때 아래와 같은 데이터 들을 추가하려고 한다. 지원번호 지원자면 회사아이디는 사용자가 원하는데로 데이터를 넣을 수 있지만 진행상황에 경우에는 합격, 불합격 2가지 경우만 들어가야한다. 이럴 때 진행상황은 Enum을 사용하여 자료형으로 묶어주면 좋다.
private Integer id; // 지원번호 private String name; // 지원자명 private Integer comId; // 회사아이디 private String status; // 진행상황
  • Apply 클래스에 아래의 코드처럼 합격, 불합격 2가지만 들어가야 하는 상황에 합격을 “오케이”라고 작성하는 사람도 있을 것이다.
public void create_test() { Apply apply = new Apply(); apply.setId(1); apply.setName("홍길동"); apply.setComId(3); apply.setStatus("오케이"); }
  • 또는 아래의 코드처럼 합격 이라고 적으려 하였지만 의도치 않게 오타가 나는 경우도 있다. 이러한 경우를 Enum을 사용하면 막을 수 있다.
public void create_test() { Apply apply = new Apply(); apply.setId(1); apply.setName("홍길동"); apply.setComId(3); apply.setStatus("학격"); }

2. 사용자가 어떤 값을 적을지 강제하기

사용자가 어떤 값을 추가 할지 모르기 때문에 인터페이스를 하나 만들어서 거기에서 값을 꺼내서 사용을 할 수 있게 만들었다.
public interface ApplyStatus { String PASS = "합격"; // 변수명 대문자, public static final 생략 String FAIL = "불합격"; }
이렇게 사용 할 시에 아래의 코드 apply1처럼 아는 사람들은 ApplyStatus에서 꺼내어 사용하면 다른 데이터 또는 오타가 들어갈 걱정을 할 이유가 없다. 하지만 Apply 클래스에서는 String 타입으로 받을 수 있기 때문에 apply2와 같이 데이터를 넣어도 그대로 받아온다.
@Test public void create_test() { Apply apply1 = new Apply(1, "홍길동", 3, ApplyStatus.PASS); Apply apply2 = new Apply(2, "임꺽정", 3, "합격"); // 위에 처럼 안 넣을 수 있음 } @Test public void create_test() { Apply apply1 = new Apply(1, "홍길동", 3, ApplyStatus.PASS); Apply apply2 = new Apply(2, "임꺽정", 3, "붕합격"); // 위에 처럼 안 넣다가 오타 }

3. Enum 클래스 만들기

💡
Enum은 리스트와 튜플과 같이 여러 개의 값을 담을 수 있다. 하지만 Enum은 데이터 값을 엄격하게 제한하고 의미를 부여할 때 사용하기때문에 더 추가하거나 할 수 없기 때문에 불변형이다.
/* 리스트 = [1,2,3] 가변 튜플 = (1,2,3) 불변 */ public enum ApplyEnum { // 열거형(불변) PASS, FAIL; }
Enum 클래스 테스트하기. ApplyEnum에서 꺼내왔을 때 잘 나오는 모습이다. 하지만 한글을 사용할 때에는 클래스를 다르게 설정하여야한다.
@Test public void create_test() { System.out.println(ApplyEnum.PASS); System.out.println(ApplyEnum.FAIL); }
notion image
값을 한글로 받기 위한 코드 작성.
public enum ApplyEnum { // 열거형(불변) PASS("합격"), FAIL("불합격"); public String value; ApplyEnum(String value) { this.value = value; } }
@Test public void create_test() { System.out.println(ApplyEnum.PASS.value); System.out.println(ApplyEnum.FAIL.value); }
notion image
  • 최종 Apply에서 ApplyEnum클래스에서 status.value를 받아오게 되면 해당 값이 아니고서는 다른 값을 작성 할 수 없다.
public Apply(Integer id, String name, Integer comId, ApplyEnum status) { this.id = id; this.name = name; this.comId = comId; this.status = status.value; }
 
@Test public void create_test() Apply apply = new Apply(1, "홍길동", 3, ApplyEnum.PASS); System.out.println(apply.getStatus()); }
notion image
  • 다른 데이터를 넣으면 오류나기 때문에 다른 데이터를 쓸 수 없게 막음
notion image
Share article

YunSeolAn