인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

his130님의 프로필 이미지

작성한 질문수

얄코의 객체지향 디자인 패턴 (Korean ver.)

SOLID 원칙

DIP 질문

해결된 질문

작성

·

47

0

DIP 예제 코드에서 질문이 있습니다.

Switchable 이라는 interface를 객체로 Switch가 갖게되는데요.

구조가 이렇게 바뀌어도

Fan의 turnOn 함수에 예를 들어 매개변수가 들어가게 되면 (Overloading)

Switch 클래스에도 영향이 가지 않나요?

switch class의 tunrOn함수의 device.turnOn() 함수도 바뀌어야 하니까요..?

답변 2

0

얄팍한 코딩사전님의 프로필 이미지
얄팍한 코딩사전
지식공유자

안녕하세요, his130님.
만약 Fan을 실행하기 위해, 아얘 매개변수까지 넣을 정도의 변화가 생기는 상황이라면
애초에 Switchable 인터페이스를 사용하면 안 될 것입니다. 그땐 완전히 다른 설계가 필요하죠.
(현실에서 켜고 끄는 기능에 다른 뭔가 변수를 집어넣는 기기는 없죠.)
DIP는 말씀하신 상황을 위한 설계가 아닙니다.
지금 가정한 상황은, 온오프 기능이 있는 스위치 하나로 그 스위치가 적용되는 모든 기기를 끄고 켤 수 있도록 하는 것입니다. 그 스위치로 선풍기 뿐 아니라 전등, 제습기 등등을 모두 사용할 수 있게 하기 위해 스위처블 인터페이스를 사용하는 것이라고 생각하시면 되겠습니다. 즉, 켜고 끄기만 하면 되는 기기들 말이죠.

정리하자면 같은 기기에 기능이 바뀔 때가 아니라, 같은 기능의 새 기기가 추가될 때를 위한 설계인겁니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. his130님!

DIP(Domain Interface Principle) 관련 질문을 해주셨군요. DIP는 고수준 모듈이 저수준 모듈에 의존하기보다는 추상화에 의존하도록 하는 설계 원칙입니다. 여기서 Switchable 인터페이스는 추상화 요소로, 다양한 객체가 이 인터페이스를 구현할 수 있게끔 합니다.

질문해주신 대로, 만약 Fan 클래스의 turnOn 메서드가 오버로딩되어 매개변수를 추가하게 된다면, Switch 클래스의 turnOn 메서드에도 간접적인 영향이 갈 수 있습니다. 이때 device.turnOn()Fan의 특정한 오버로딩된 메서드를 호출하도록 수정할 필요가 있을 겁니다.

하지만 DIP 원칙을 잘 지킨다면, Switch 클래스의 코드를 직접 수정하지 않고도 이를 해결할 수 있는 설계를 고려해야 합니다. 예를 들어, 전략 패턴(Strategy Pattern)을 활용해 Switch 클래스를 수정하지 않고도 오버로드된 메서드를 호출할 수 있는 방법을 생각해 볼 수 있습니다.

혹시 얄코의 강의 내 DIP나 관련된 질문이 있으시다면, 강의 내 질문 게시판에서 DIP와 관련된 예제나 질문의 답변들을 참고하실 수도 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

his130님의 프로필 이미지

작성한 질문수

질문하기