해결된 질문
작성
·
63
1
안녕하세요. 먼저, '객체지향의 사실과 오해'와 '오브젝트' 책과 더불어 이 강의까지 수강하게 되었습니다. 정말 좋은 지식을 전달해주셔서 감사합니다!
창피하지만 제가 어려워하고 있는 부분은 요구사항에서 도메인을 추출하는 것입니다.
예를 들어, 영화 예매 시스템같은 경우 제가 혼자 생각했을 때는 단순히 '영화', '할인' 정도로밖에 도메인을 추출을 못했습니다. 책과 강의를 통해 '상영'이라는 도메인을 추출할 수 있다는 사실은 생각지도 못했습니다.
혹시, 이렇게 여러 도메인들을 추출하기 위한 기준이라던가 방법이 따로 있을지 궁금하여 질문드립니다. 아니면 역시 많이 생각해보고 구현해보는 방법밖에 없는 걸까요? ㅜㅜ
답변 2
2
JMJ님 안녕하세요. 좋은 질문 남겨 주셔서 감사합니다.
애플리케이션 개발에 적합한 도메인 개념을 찾는 일은 저를 포함해서 모든 사람들이 어렵게 생각하는 작업이기 때문에 창피해 하실 일이 전혀 아닙니다.
도메인 개념을 찾기 위한 다양한 패턴이나 카탈로그들이 제시되어 왔지만 모든 경우에 적용할 수 있는 최적화된 해법은 존재하지 않는 것으로 보입니다.
애플리케이션마다 가정하고 있는 제약조건이 다르고 요구사항의 변화 양상이 다르기 때문에 어떤 도메인에 적합한 도메인 개념은 이것이다라고 말하기 어려운 것 같아요.
다양한 자료를 보시고 많은 프로젝트 경험이 쌓일수록 조금 더 수월해지기는 하지만 아직도 여전히 어려운걸 보면 경험이 모든 것을 해결해 주지는 못하더라구요.
제가 가장 쉽고 직관적이리고 생각하는 가이드는 다음과 같습니다.
현재 시점에서 가장 단순하게 생각되는 개념들을 기반으로 우선 코드를 구현해봅니다.
처음부터 모든 개념을 정확하게 추출하려고 하지말고 우선 생각나는 가장 간단한 개념들을 기반으로 코드를 작성하면서 고민했던 개념들이 현재 요구사항에 적합한지 최대한 빠르게 피드백을 받는 것이 좋습니다.
구현 시에 클래스가 응집도나 결합도 관점에서 너무 커지거나 복잡해진다면 새로운 개념을 추가한 후 일부 책임을 새로운 개념에 맡깁니다.
이렇게 코드의 퀄리티를 높여야 하는 시점이 되면 도메인에 대해 좀 더 깊게 고민하게 되고 자연스럽게 새로운 도메인 개념이 도출되게 됩니다.
요구사항이 변경되면 현재의 코드가 요구사항을 수용하기에 적합한지 판단하고 필요하면 새로운 도메인 개념을 기반으로 코드를 리팩터링합니다.
요구사항이 변경되는 시점이야말로 새로운 도메인 개념을 추출할 수 있는 적절한 타이밍입니다. 지금까지 적합하지 않아 보이던 도메인 개념이 위치를 찾고, 적합해 보이던 도메인 개념이 여러 개의 더 작은 도메인 개념으로 나뉘기도 합니다. 리팩토링을 통해 새롭게 얻은 도메인 지식을 코드에 반영해야겠죠.
도메인 개념이 고정된 것이 아니고 코드를 구현하거나 요구사항이 변경됨에 따라 지속적으로 변경된다는 사실을 의도적으로 인식하고 언제라고 리팩토링하신다면 적절한 시기에 적합한 도메인 개념들을 식별하실 수 있으실거에요.
여기에 아래 인프런 AI가 제시하는 가이드가 나와있는 다양한 자료를 학습하시고 실제 프로젝트에서의 경험치를 쌓으신다면 좀 더 수월해지실 거라고 생각합니다.
JMJ님뿐만 아니라 모든 분들이 어려워하시는 영역이고 한번에 적절한 도메인 개념들을 모두 식별하는 것은 어려운 작업이라서 지속적으로 리팩토링을 통해 적절한 도메인 개념을 식별한다는 마음으로 접근하시면 부담이 적어지실 거에요.
답변 중에 좀 더 세부적인 내용이 궁금하시면 질문해 주세요. 🙂
즐거운 주말 보내세요!
0
안녕하세요, 인프런 AI 인턴입니다.
JMJ님께서 ‘객체지향의 사실과 오해’와 ‘오브젝트’를 통해 많은 것을 배우셨다니 기쁩니다! 요구사항에서 도메인을 추출하는 것은 객체지향 설계에서 중요한 과정인데요, 이에 대해 도움을 드리도록 하겠습니다.
문제 도메인의 이해: 애플리케이션이 해결하고자 하는 문제에 대해 깊이 있는 이해가 필요합니다. 요구사항을 분석하여 주요 개념, 용어, 업무 프로세스 등을 파악하시면, 도메인을 추출하기 훨씬 수월해집니다.
유비쿼터스 언어 활용: 도메인 전문가와 개발자가 동일한 언어로 소통할 수 있도록 도메인 용어를 정의합니다. 예를 들어 ‘영화 예매 시스템’에서는 ‘상영’, ‘할인’, ‘좌석’ 같은 도메인 용어가 있을 수 있습니다.
시스템 경계를 구체화: 시스템이 해결하고자 하는 문제의 경계를 명확하게 구분합니다. 이를 통해 어떤 도메인이 시스템에 포함되어야 하는지 결정할 수 있습니다.
핵심 도메인 식별: 프로젝트의 비즈니스 가치를 가장 크게 올릴 수 있는 핵심 도메인을 식별합니다. 이들은 주로 시스템의 주요 기능과 관련된 요소들이며, ‘영화 예매 시스템’에서의 ‘영화’, ‘상영’, ‘할인’ 등이 해당될 수 있습니다.
도메인의 역할과 책임 파악: 각 도메인이 시스템 내에서 어떤 역할을 하고 어떤 책임을 지니는지 분석합니다. 예를 들어, ‘상영’ 도메인은 특정 시간과 장소에서의 영화를 뜻할 수 있습니다.
추가적으로, 실습을 통해 다양한 상황에서 도메인을 추출하면서 경험을 쌓는 것이 핵심입니다. 반복적인 연습을 통해 더욱 직관적으로 도메인을 식별할 수 있을 것입니다.
아래는 도메인 분석과 관련된 내용을 다룬 비슷한 질문/답변이니 참고해 보시면 추가적인 인사이트를 얻을 수 있을 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.