서로 관련 있는 상수들을 하나의 그룹으로 묶어 관리할 수 있게 해주는 자료형
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);
}

값을 한글로 받기 위한 코드 작성.
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);
}

- 최종 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());
}

- 다른 데이터를 넣으면 오류나기 때문에 다른 데이터를 쓸 수 없게 막음

Share article