작성
·
253
0
강의는 현재 "관심사의 분리" 수강하고 있습니다.
그전에, 여태까지 만들었던 주문과 할인 도메인이 OCP와 DIP를 어기고 있다는 것을 배웠습니다.
그런데, OCP와 DIP를 어기지 않게 수정하는 것이
코드 중 private final DiscountPolicy discountPolicy = new RateDiscountPolicy();를 사용하지 않고 AppConfig를 사용하는 것이더군요.
여기서 제가 궁금한 것은,
객체지향 설계의 5가지 원칙이 S, O, L, I, D 라고 5가지나 나와 있는데
저 코드 한 줄이 O, D를 동시에 어기는 것이 이상하다는 것입니다. (어쩌면 S, L, I 중에서 더 어기고 있는 것이 있을 수도 있고요)
분명 서로 다르니까 5가지로 분리를 해놨을텐데, 문제 원인도, 해결 방법도 서로 동시에 공유하고 있습니다.
구글에서 SOLID의 설명, 예시를 다 찾아봐도 문제 원인을 공유하는 경우가 많았습니다.
OCP를 고쳤더니 DIP가 고쳐진다고 하면
서로 해결 방법을 공유하고 있는 부분이 있다고 하면
SOLID가 아니고 SOLI가 되어야 하지 않나... 생각합니다.
확장에는 열려 있으나 변경에는 닫혀 있어야 하도록 유도하는 방법이, 의존 관계 역전을 막아 주기도 한다면 굳이 왜 서로 분류를 해놓은 건지 궁금해요.
이건 마치...
강아지를 산책시키는 일 A와 유산소운동을 하는 일 B를 계획했는데
A를 하니까 유산소운동이 되어서
평생 B를 못하는 느낌입니다.
혹시 OCP는 지키는데 DIP는 어기는 코드가 있을까요? (혹은 그 반대)
답변 1
0
안녕하세요. 이기정님, 공식 서포터즈 OMG입니다.
고민해본적이 없는 질문 내용이여서 찾아보니 스택오버플로우에 비슷한 고민을 하여 남긴 질문이 있네요^^
답변에 인위적인 의사코드도 있고 예시도 있으니 참고하시면 좋을 것 같습니다
추가로 더 찾아보았는데, 여기서 설명하는 '의존관계가 역전됨'과 확장에는 열려있고 변화에는 닫혀있다는 것은 같지 않음을 그림으로 비교 예시가 잘 설명 되어 있어서 링크 첨부합니다.
감사합니다.