enum 에 도메인 로직이 들어가도 될까요?
안녕하세요!
현업에서 도메인(core) 모듈에 enum 들도 같이 두고, 타입 판단 로직 등 도메인 비즈니스 로직을 enum 클래스 내부에도 응집시켜 놓는 편인데요~ (bo 객체 클래스가 따로 존재하지 않거나 객체 클래스 보다는 enum 클래스에서 판단하는 것이 역할이 더 맞다고 생각되는 경우 ex enum 생성 static 메서드 등)
현재 예시 프로젝트의 구조에서는 core-enum이 core-api 의 도메인 로직 등을 의존하지 않고 완전 독립적으로 존재하기 때문에 enum class에는 비즈니스 로직이 존재하면 안된다는 것을 의도하신 것 같아 질문드립니다!
enum 은 로직에서 아예 제외시키는 편이신가요? 그렇다면 이유가 궁금합니다.
답변 2
1
안녕하세요 질문 감사드립니다!
강의에서도 언급하였던 것 같긴한데요!
core-enum이 core-api 의 도메인 로직 등을 의존하지 않고 완전 독립적으로 존재하기 때문에 enum class에는 비즈니스 로직이 존재하면 안된다는 것을 의도하신 것 같아
요 내용을 기준으로 core-enum 모듈을 구성한 것은 아닙니다!
core-enum 이 존재하는 이유는 enum 값을 db-core 모듈(앞으로 생길 모듈들)에서도 사용해야하는데 enum을 core-api에 두면db-core -> core-api 이렇게 큰 규모로 모듈 의존성을 걸어야하다보니 그를 해결하기 위해 모듈이 분리되어있다고 보시면 됩니다!
(이 부분은 사실 다음 수준의 모듈 아키텍처로 넘어가면 깔끔하게 개선이 되긴합니다)
그래서 원래 주신 질문에 답변을 드리면 enum class 에 적절한 비즈니스 로직은 존재해도 된다고 생각합니다, 저도 실무에서 그렇게 많이 작성하구요 😃
모쪼록 답이 되었길 바랍니다! 완강까지 잘 부탁드리고 수강평도 기대하겠습니다! 감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. worldbright0님.
코드를 작성하면서 enum에 도메인 로직을 포함시킬지 여부는 설계 선택의 문제입니다. 프로젝트의 전체 구조와 각 클래스의 역할에 따라 다르게 접근할 수 있습니다.
도메인 로직과 enum
enum의 사용 이유:enum은 고정된 상수 집합을 표현하는 데 주로 사용되며, 상태를 명확히 나타낼 수 있습니다.
- 타입 안전성과 코드의 가독성을 높여주며, 특정 동작이나 상태 변화를 제어하는 데 유용합니다.
비즈니스 로직 결합:
- 장점:
enum자체 내에 도메인 로직을 포함하면, 특정 타입에 대한 동작을 명확하게 정의할 수 있고, 타입과 관련된 규칙들을 쉽게 관리할 수 있습니다.
- 단점:
enum이 너무 많은 책임을 가지면, 관리가 어려워지고 테스트가 복잡해질 수 있습니다. 특히 복잡한 비즈니스 로직이 포함될 경우, 코드의 응집성을 확보하기 어려워질 수 있습니다.
- 장점:
예시 프로젝트에서의 구조:
core-enum모듈과 별도로 독립되어 있다는 것은 모듈의 응집도가 떨어질 수 있음을 의미합니다. 이는enum에 비즈니스 로직을 포함시키지 않아 코드의 명확성을 높이려는 의도로 보입니다.
- 모듈 간의 의존성을 줄이려는 설계라고도 해석할 수 있습니다.
관련하여 더 많은 의견과 토론을 통해 이해를 돕고 싶으시다면 아래 게시물을 참고하시기 바랍니다. 비슷한 주제의 논의가 포함되어 있습니다:
- core-enum 모듈에 대하여 -
core-enum모듈과 도메인 계층의 설계를 이해하는 데 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
궁금한점이 여러개 생겼습니다.
1
38
1
다양한 관점의 코드 경험을 위해 개선하지 않은 코드
1
55
1
histories() 응답에 PointHistory.id를 포함한 이유가 궁금합니다/
1
44
2
SettlementTargetRepository Jquery 질문
1
48
2
부가 기능을 이벤트 핸들러로 분리하는 기준이 있을까요?
1
60
2
엔티티의 pk 를 0으로 초기화하시는 이유가 있을까요??
1
67
2
제미니님 안녕하세요!
1
77
2
개념 간 격벽 분리와 목록 조회 시 발생하는 참조 구조
1
85
2
프로덕트와 프로덕트카테고리 사이의 삭제 정책
1
76
2
새로 개발한다면 구현 순서
1
136
1
의존 방향에 대한 고민
1
125
2
어드민(Back-office)에서 예약 변경 시, '할인 조건 재검증(쿠폰 회수)' vs '기존 혜택 유지' 중 어떤 정책이 일반적인가요?
1
98
2
OrderKeyGenerator 인스턴스화 generate() 질문
1
84
1
외부 API 통합 시 데이터 제어 범위 설계 질문
1
98
1
PG 결제 승인 로직
1
130
2
QnA에서 Join 필드 표현법
1
90
1
결제서비스 콜백 동시성문제 가능성
1
110
2
굿
1
109
1
도메인/엔티티 분리 상황에서 쓰기 작업 하는 방법
1
137
2
도메인 객체와 엔티티 객체 사용
1
139
2
CouponService 의존성 의문
1
98
2
상품 목록 조회 고도화 질문
1
112
2
표현 계층에서의 접근 지점이 다양해지는것과 이를 해결하기 위한 파사드의 도입에 대해 제미니님의 생각이 궁금합니다.
1
123
2
제품상세 코드 느끼기
1
144
2





