inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

떠먹여주는 객체지향 디자인 패턴 - by 얄코

SOLID 원칙

DIP 질문

해결된 질문

160

his130

작성한 질문수 3

0

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

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

구조가 이렇게 바뀌어도

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

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

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

java 객체지향 디자인-패턴

답변 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와 관련된 예제나 질문의 답변들을 참고하실 수도 있습니다.

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

[영한님]Spring Boot 및 프로젝트 생성

0

8

1

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

27

1

리뉴얼 시기

0

4

0

스크립트에 대해 질문 있습니다.

1

15

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

1

13

1

조건 검색 질문

0

12

1

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

21

2

클로드코드 명령어-대화&세션관리 수업 자료

0

30

1

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

43

2

PlatformTransactionManager, ResourcelessTransactionManager 질문

1

50

2

자료 한번에 다운받기

0

27

1

스프링 빈 등록 방법 2가지 다 알아야하는 이유

0

48

1

mybatis 를 이용한 crud에서 insert에서 resultType='long" 이라고 하셨는데요,

0

24

1

댓글 삭제 로직에서 동시성 문제 발생 가능성

0

34

1

설계 트레이드 오프 링크 접속 안됨

0

72

2

강의 순서에 대한 궁금증

0

120

2

3-layer 에서의 파사드 패턴적용

0

116

2

파사드 패턴과 템플릿 메서드 패턴의 차이

0

164

2

강의 전부 수강했는데 퀴즈 활성화가 안되는 것 같습니다.

0

137

1

수정 요청

-18

276

5

안녕하세요.

0

147

1

질문이있습니다.

0

132

1

빌더패턴 질문있습니다!

0

254

1

파사드 패턴에 대해 질문이 있습니다.

0

497

3