묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨제미니의 개발실무 - 지속 성장 가능한 소프트웨어를 만들어가는 방법
모듈에 대한 단방향 의존
안녕하세요. 제미니님 이번에도 좋은 강의를 제공해주셔서 감사합니다.모듈 분리에서 궁금한 내용이 있는데요. 제미니님이 제공해주신 PaymentAPI 와 DB 모듈을 별도로 했다고 했을 때 API 규격에 맞게 DB 모듈이 구현이 되어야 한다고 생각하고 있습니다. 즉, 해당 PaymentAPI 에서 제공하는 DB 접근에 대한 인터페이스를 DB 모듈이 구현하는 의존성 역전 원칙을 적용한 상황입니다.하지만, 이 상황에서 단방향 모듈 참조를 하게 된다면 DB 모듈은 PaymentAPI 가 제공하는 인터페이스의 유무를 알 수가 없게 되는데요. 저는 위 문제에 대한 해결방법으로 두 가지가 떠오릅니다.모듈 분리 시 API 모듈에 인터페이스를 만들고 DB 모듈 교체에 따른 새로운 구현체를 구현한다.(모듈 교체에 따라 이전 모듈에 대한 클래스 참조가 사라져 컴파일에러가 발생하게 되고 주석처리가 필요하다) 모듈 교체 시 이전 모듈에서 사용했던 인터페이스를 하위 모듈에서 똑같이 생성해주고 동일한 인터페이스를 참조하도록 하여 상위 모듈에는 변화를 주지 않는다. (변화가 최소화되지만 인터페이스가 많을 수록 구현도가 올라간다. 인터페이스를 동일하게 만들거라는 보장이 되어야 한다.)1번 코드paymentAPI { // implementation 'project:paymentDB' // implementation 'project:paymentDB2' interface CommandPort { fun save(command: PaymentCommand) } class PaymentDBImplV1 : CommandPort { override fun save(command: PaymentCommand) { paymentDB.saveV1(command); // paymentDB2 모듈 사용 시 주석 처리 } } class PaymentDBImplV2 : CommandPort { override fun save(command: PaymentCommand) { paymentDB2.saveV2(command); // paymentDB1 모듈 사용 시 주석 처리 } } } paymentDB { implementation 'A.DB' } paymentDB2 { implementation 'B.DB' }2번 코드paymentAPI { // implementation 'project:paymentDB' // implementation 'project:paymentDB2' class PaymentAPILogic(val paymentDB: CommandPort){ fun save(command: PaymentCommand) { paymentDB.save(command); // paymentDB2 모듈 사용 시 주석 처리 } } } paymentDB { implementation 'A.DB' interface CommandPort { fun save(command: PaymentCommand) } class PaymentCommandImpl : CommandPort { override fun save(command: PaymentCommand) { DB.save(command); } } } paymentDB2 { implementation 'B.DB' interface CommandPort { fun save(command: PaymentCommand) } class PaymentCommandImpl : CommandPort { override fun save(command: PaymentCommand) { DB.save(command); } } }간단하게 코드를 작성하면 위와 같은 형태가 될 것 같습니다.제미니님은 어떠한 방향으로 설계를 하시는지 혹은 제 질문에서 제가 잘 못 이해한 부분이 있어 이러한 방법으로 사고가 흘러가는지 말씀을 들어보고 싶습니다.마지막으로 유튜브 및 인프런에서 귀한 지식과 귀한 시간을 제공해주셔서 항상 감사합니다!
-
미해결readable_code::CMake - Fancy하게 C++ Project 만들기
cmake 설치 및 예제 파일
안녕하세요. 강의를 보면서 따라 하고 싶은데 cmake 설치 및 버전, 파일 구조등에 대한 정보를 찾을 수 없어서 문의 드립니다.
-
미해결정보전략계획(ISP) 수립 실무
환경분석과 현황분석을 병행할 수 있나요?
프로젝트 시간이 부족한데요환경분석과 협황분석을 동시에 해도 되나요?
-
미해결readable_code::CMake - Fancy하게 C++ Project 만들기
MATCHES - 특정 패턴 포함
26분 45초에 다른 메시지를 보고 되었다고 오해하신거 같아요^[a-z]{3}.txt$abc.txt도 되지 않고 a3.txt도 되지 않는데 어떨때 True인가요?
-
해결됨대규모 시스템 설계 Part 1
.single cluster 큰 장애 복구
single cluster 큰 장애 복구는 다른 클러스터로 우회한다고 하셨는데 single cluster는 클러스터가 1개 아닌가요 ??
-
미해결대규모 시스템 설계 Part 1
part 2 강의 오픈 문의
안녕하세요. 우선 part 1 좋은 강의 감사합니다~part 2 강의 오픈은 언제쯤 되는지 궁금하고 무엇을 다룰 예정이신지도 궁금합니다.