Entity에 이런 코드를 쓰다가 Enum을 왜 쓰는지 똑바로 모르고 쓰는 중이라는 생각이 들어서 좀 더 알아보기로 했다.
1 |
|
1. Enum이란 뭘까
위에서 사용한 @Enumerated(EnumType.STRING)
어노테이션은 엔티티 클래스에서 enum 타입을 데이터베이스에 어떻게 저장할 지 정의해주는 역할을 한다. 즉, enum 값을 문자열로 저장하라는 뜻이다. 그렇다면 enum타입은 뭘까?
enum
은 특정한 상수 집합을 정의하는 자료형이다. 계절, 국가, 회원 등급, 처리 상태, 포켓몬 이름 따위가 있겠다. 미리 값이 정해져 있고, 다른 값이 추가되거나 변경되지 않는 경우 enum으로 정의하기 적합한 자료라고 할 수 있다.
enum을 사용하면 코드의 가독성을 높일 수 있고, 특정 값들이 정해진 범위 안에서만 사용되도록 해 주어서 실수를 줄이게 해준다고 하는데 어떤 점에서 그런지 코드를 살펴보겠다.
1 |
|
1 |
|
1 |
|
그렇다면 enum을 썼을 때는 어떻게 표현 할 수 있을까?
1 |
|
이 상태로도 코드는 작동한다. 하지만 일을 하면서 다루게 되는 건 계절처럼 직관적으로 의미를 알 수 있는 데이터가 아닌 경우가 더 많기 때문에 코드 가독성과 협업 편의성을 위해서 설명을 달아주는 게 좋다.
1 |
|
이런 식으로 말이다. 그 밖에도 숫자나 코드처럼 필요한 필드를 추가해서 사용하기도 한다. 권한이나 역할을 정의할 때에도 유용하게 쓸 수 있다.
1 |
|
1 |
|
2. Enum에서 데이터를 꺼내 쓰려면
일반 클래스에서 static 상수를 사용하는 것처럼 enum 이름과 값을 직접 참조하면 되는데, 몇 가지 주요 사용법을 예시로 정리해둔다.
- enum 값 참조
1
2
3
4
5
6public class SeasonTest { public static void main(String[] args) { Season ss = Season.SPRING; System.out.println(ss); //출력 : SPRING } }
- 필드 값 가져오기
1
2
3
4
5
6
7public class SeasonTest { public static void main(String[] args) { Season ss = Season.SPRING; String descriptrion = ss.getDescriptrion(); System.out.println(descriptrion); //출력 : 봄 } }
- switch문에서 사용하기
enum은 switch문과 함께 사용되는 경우가 많다. 각 enum값에 맞는 동작을 지정할 수 있다.1
2
3
4
5
6
7
8
9public class SeasonTest { public static void main(String[] args) { Season ss = Season.SPRING; switch(ss){ case SPRING -> System.out.println("봄입니다."); case SUMMER -> System.out.println("여름입니다."); } } }
- 값 비교하기
enum은 동일성 비교에도 유용하게 쓸 수 있다. enum끼리는==
로 비교가 가능하고, enum에 정의된 다른 필드를 사용해 값을 비교하는 것도 가능하다.1
2
3
4
5
6
7
8
9public class SeasonTest { public static void main(String[] args) { Season ss = Season.SPRING; String description = "봄" if(ss.getDescription().equals(description)){ System.out.println("봄이라고 합니다."); } } }
- enum 값 모두 순회하기
enum에 있는 모든 값을 순회해야 할 때는 values() 메서드를 사용할 수 있다. 이 메서드는 해당 enum 타입의 모든 값을 배열로 반환한다.
1
2
3
4
5
6
7public class SeasonTest { public static void main(String[] args) { for (Season ss : SeasonTest.values()) { System.out.println(ss + ": " + ss.getDescription()); } } }
3. 결론적으로
기존 방식으로 상수를 사용해도 상관은 없지만, 타입 안정성이나 가독성 향상, 고정된 값 집합 관리의 용이성 등의 이유로 enum을 사용하면 코드의 유지보수성과 안정성이 높아진다.