처음
처음에 Enum 타입에 대해서 부정적으로 바라봤다.
Enum 클래스를 새로 생성하는 것도 별로라고 생각했고 성능적으로 크게 높아지는지 확신도 없었기 때문이다.
근데 역시 그냥 생기는 기술은 없는 것 같다. Enum 타입을 무시하고 사용하지 않은 대가를 톡톡히 치뤘다. ㅠㅠㅠㅠ
Enum 타입을 사용하지 않는다면?
프로젝트를 진행할 때 각종 데이터 타입을 모두 String으로 설정했었다.
처음에는 아무 문제도 없었다. 사실 조심만 하면 사용하는데 크게 문제는 없었다.
단순히 MessageType이나 NoticeType과 같은 형식이 정해진 값들도 오타만 내지 않는다면 테스트 코드나 DB에 넣을 때도 크게 어려움은 없었다.
실제로 사용한 noticeType
private String noticeType; //알림 타입
private String content; //내용
하지만 이 오타가 마지막에 돼서야 큰 문제로 다가왔다.
입력에 문제가 생겼을 때 컴파일러나 DB나 모두 에러를 알려주지 않는다.
이게 사실 가장 큰 어려움이 아니었을까? 바보같다...
분명히 Emergency라는 타입에 대한 메세지를 모두 찾는 쿼리를 테스트했는데 테스트 코드는 문제없이 잘 돌아가던게
실제 DB에서 꺼내려고 하니 데이터 몇개가 나오지 않는다.
확실히 타입이 정해져있는 값이었기 때문에 오타라고 생각하지 않고 코드가 잘 못 되었다고 생각하고 코드만 계속 쳐다보고 있었다.
결과는.... 1시간이나 코드만 보다가 DB를 열어봤다.... ㅠㅠ
Warning가 Waning로 들어와있었다.(DB에 더미 데이터를 Postman으로 넣다보니 오타가 발생했나보다)
굉장히 현타가 왔다.
Enum을 사용한다면?
변수 Enum 타입으로 선언
@Enumerated(EnumType.STRING)
private NoticeType noticeType; //알림 타입
private String content; //내용
아주 간단하게 타입 이름만 설정했다.
//알림 종류 ex) 심장박동 이상, SOS 호출, 경고, 환경
public enum NoticeType {
HEART, SOS, WARNING, ENV
}
여기서 Postman으로 데이터를 넣을 때 타입을 "HEART2"로 오타가 났다고 가정하면
알아서 걸러준다.
그니까 이제부터 형식이 정해져있는 데이터라면 반드시 Enum 타입을 쓰는 것을 습관화하자!
물론 장점이 이것만 있는 것은 아니다.
1. 문자열보다 IDE의 지원을 많이 받을 수 있다.
- 자동 완성, 오타 검증, 텍스트 리팩토링 등등
2. 허용 가능한 값을 제한할 수 있다.
3. 리팩토링이 필요할 때 변경 범위를 줄일 수 있다.
- 형식이 추가되거나 제거될 때 Enum 클래스만 수정하면 된다.
마치며
반성해야 한다.
Enum 타입을 생각하지 않고 편한대로 String같은 단순 타입으로 모두 설정한 내 잘못이다.
다행인건 오타로 입력한 값을 바로 찾아서 일이 커지기 전에 해결할 수 있었다.
앞으로 한줄의 코드를 작성하더라도 더 좋은 기능은 없는지 어디서 에러가 발생할 수 있는지 파악하고
에러가 발생하더라도 어디서 어떻게 고치면 되는지 파악할 수 있도록 해야겠다...
참고
https://techblog.woowahan.com/2527/
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com
김동욱님이 작성하신 Enum에 대한 이야기를 읽어보면 좋을 거 같다.
오래되긴 했지만 확실히 도움이 된다.
'Dev > JAVA' 카테고리의 다른 글
Java Stream VS For (1) | 2024.04.07 |
---|
처음
처음에 Enum 타입에 대해서 부정적으로 바라봤다.
Enum 클래스를 새로 생성하는 것도 별로라고 생각했고 성능적으로 크게 높아지는지 확신도 없었기 때문이다.
근데 역시 그냥 생기는 기술은 없는 것 같다. Enum 타입을 무시하고 사용하지 않은 대가를 톡톡히 치뤘다. ㅠㅠㅠㅠ
Enum 타입을 사용하지 않는다면?
프로젝트를 진행할 때 각종 데이터 타입을 모두 String으로 설정했었다.
처음에는 아무 문제도 없었다. 사실 조심만 하면 사용하는데 크게 문제는 없었다.
단순히 MessageType이나 NoticeType과 같은 형식이 정해진 값들도 오타만 내지 않는다면 테스트 코드나 DB에 넣을 때도 크게 어려움은 없었다.
실제로 사용한 noticeType
private String noticeType; //알림 타입
private String content; //내용
하지만 이 오타가 마지막에 돼서야 큰 문제로 다가왔다.
입력에 문제가 생겼을 때 컴파일러나 DB나 모두 에러를 알려주지 않는다.
이게 사실 가장 큰 어려움이 아니었을까? 바보같다...
분명히 Emergency라는 타입에 대한 메세지를 모두 찾는 쿼리를 테스트했는데 테스트 코드는 문제없이 잘 돌아가던게
실제 DB에서 꺼내려고 하니 데이터 몇개가 나오지 않는다.
확실히 타입이 정해져있는 값이었기 때문에 오타라고 생각하지 않고 코드가 잘 못 되었다고 생각하고 코드만 계속 쳐다보고 있었다.
결과는.... 1시간이나 코드만 보다가 DB를 열어봤다.... ㅠㅠ
Warning가 Waning로 들어와있었다.(DB에 더미 데이터를 Postman으로 넣다보니 오타가 발생했나보다)
굉장히 현타가 왔다.
Enum을 사용한다면?
변수 Enum 타입으로 선언
@Enumerated(EnumType.STRING)
private NoticeType noticeType; //알림 타입
private String content; //내용
아주 간단하게 타입 이름만 설정했다.
//알림 종류 ex) 심장박동 이상, SOS 호출, 경고, 환경
public enum NoticeType {
HEART, SOS, WARNING, ENV
}
여기서 Postman으로 데이터를 넣을 때 타입을 "HEART2"로 오타가 났다고 가정하면
알아서 걸러준다.
그니까 이제부터 형식이 정해져있는 데이터라면 반드시 Enum 타입을 쓰는 것을 습관화하자!
물론 장점이 이것만 있는 것은 아니다.
1. 문자열보다 IDE의 지원을 많이 받을 수 있다.
- 자동 완성, 오타 검증, 텍스트 리팩토링 등등
2. 허용 가능한 값을 제한할 수 있다.
3. 리팩토링이 필요할 때 변경 범위를 줄일 수 있다.
- 형식이 추가되거나 제거될 때 Enum 클래스만 수정하면 된다.
마치며
반성해야 한다.
Enum 타입을 생각하지 않고 편한대로 String같은 단순 타입으로 모두 설정한 내 잘못이다.
다행인건 오타로 입력한 값을 바로 찾아서 일이 커지기 전에 해결할 수 있었다.
앞으로 한줄의 코드를 작성하더라도 더 좋은 기능은 없는지 어디서 에러가 발생할 수 있는지 파악하고
에러가 발생하더라도 어디서 어떻게 고치면 되는지 파악할 수 있도록 해야겠다...
참고
https://techblog.woowahan.com/2527/
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com
김동욱님이 작성하신 Enum에 대한 이야기를 읽어보면 좋을 거 같다.
오래되긴 했지만 확실히 도움이 된다.
'Dev > JAVA' 카테고리의 다른 글
Java Stream VS For (1) | 2024.04.07 |
---|