이번 프로젝트에 WebSocket/Stomp 를 이용해 채팅기능을 구현하면서 프론트에 전달하는 messageType에 Enum을 사용하게 되었다. 내가 구현한 코드부분이 아니기도하고 Enum에 대한 개념이해가 부족해서 정리해보려 한다.
Enum 이란?
- Enum이란 enumerated type의 줄임말로 열거형이라고 불리며 서로 연관된 상수들의 집합을 의미한다.
- 흔히 상수를 정의할 때 final static string 과 같은 방식으로 상수를 정의한다. 하지만 이렇게 상수를 정의해서 코딩하는 경우 다양한 문제가 발생하는데, 이러한 문제점들을 보완하기 위해 자바 1.5버전부터 새롭게 추가된 것이 바로 "Enum" 이다.
- 기존에 상수를 정의하는 방법이였던 final static string 과 같이 문자열이나 숫자들을 나타내는 기본자료형의 값을 Enum을 이용해서 같은 효과를 낼 수 있다.
Enum의 장점
- IDE의 지원을 받을 수 있다. 자동완성, 오타검증, 텍스트 리팩토리 등
- 허용 가능한 값들을 제한할 수 있다.
- 리팩토링 시 변경 범위가 최소화 된다. 내용을 추가해도 Enum 코드만 수정하면 된다.
- 확실한 부분과 불확실한 부분을 분리할 수 있다.
- 문맥(Context)을 담을 수 있다.
- 코드가 단순해지며, 가독성이 좋다.
- 인스턴스 생성과 상속을 방지하여 상수값의 타입안정성이 보장된다.
- enum class를 사용해 새로운 상수들의 타입을 정의함으로 정의한 타입이외의 타입을 가진 데이터값을 컴파일시 체크한다.
- 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.
Enum 사용시 주의점
- Enum을 사용하는데 있어 가장 큰 허들은 "변경이 어렵다"란 점
- 코드를 추가하거나 변경해야 하는 일이 빈번하다면, 매번 Enum 코드를 변경하고 배포하는것보다 관리자 페이지에서 관리자가 직접 변경하는 것이 훨씬 편리할 수 있다.
- 위와 같은 경우 테이블로 관리함으로써 얻는 장점이 정적언어를 활용함으로써 얻는 장점을 버릴정도로 더 큰지 고민해봐야 한다.
[ 참고자료 ]
https://eatnows.tistory.com/91
https://limkydev.tistory.com/50
https://techblog.woowahan.com/2527/
'Coding > Spring' 카테고리의 다른 글
[49] 트러블 슈팅 : JWT signature does not match locally computed signature (1) | 2023.01.12 |
---|---|
[48] 트러블슈팅 : No serializer found for class (Spring Boot) 해결못함 ^_^ (0) | 2023.01.11 |
[46] 트러블 슈팅 : InvaliDataAccessApiUsageException: detached entity passed to persist (0) | 2023.01.10 |
[45] Git vs Github vs Git Flow (0) | 2023.01.10 |
[44] Spring vs Spring boot 차이 (0) | 2023.01.09 |