inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

SOLID는 서로 독립적이지 않은 것 같은데 맞나요?

317

이기정

작성한 질문수 12

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는 어기는 코드가 있을까요? (혹은 그 반대)

oop spring

답변 1

0

OMG

안녕하세요. 이기정님, 공식 서포터즈 OMG입니다.


고민해본적이 없는 질문 내용이여서 찾아보니 스택오버플로우에 비슷한 고민을 하여 남긴 질문이 있네요^^

답변에 인위적인 의사코드도 있고 예시도 있으니 참고하시면 좋을 것 같습니다

https://stackoverflow.com/questions/18428027/what-is-difference-between-the-open-closed-principle-and-the-dependency-inversio


추가로 더 찾아보았는데, 여기서 설명하는 '의존관계가 역전됨'과 확장에는 열려있고 변화에는 닫혀있다는 것은 같지 않음을 그림으로 비교 예시가 잘 설명 되어 있어서 링크 첨부합니다.

https://softwareengineering.stackexchange.com/questions/220765/open-close-principle-ocp-vs-dependency-inversion-principle-dip

감사합니다.

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

43

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

72

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

87

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

79

1

테스트 속도가 나중에 영향이 있을까요?

0

75

1

gradle 설정 안떠서 질문 남깁니다!

0

116

2

build.gradle로 프로젝트를 여는 이유

0

81

1

provider 사용하는 이유

0

82

1

다음 강의 뭘 들어야 할까요

0

123

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

62

1

beanB

0

79

2

퀴즈다시풀기

0

63

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

90

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

63

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

102

2

도메인의 정의?

0

57

1

ApplicationContext 질문입니다.

0

60

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

86

2

ai api 선정하기 관련 질문

0

115

2

생성자 자동주입 관련해서

0

60

1

생성자 직접 호출 vs 팩토리 메서드 패턴

0

91

2

Spring에서 SessionScope와 RequestScope는 함께 사용되나요?

1

62

1

12:25

0

74

2

appConfig.xml 오류

0

123

1