Ruby 쉽게 배우는 SOLID 원칙⑤ "의존성 역전의 원칙"
SOLID 원칙은
다음 5가지 원칙은 소프트웨어의 확장성과 유지보수성을 높이기 위한 것이다.
의존성 반전의 원칙(DIP)은
이런 말만으로는 무슨 말인지 전혀 모르겠다고 생각해 용어를 정리한 뒤 구체적인 예로 설명한다.
용어
의존성 반전 원칙에 어긋나는 예
다음 세 반이 있다고 가정해 보세요.
NotificationManager
: 공지 후 공동 처리를 위한 클래스SlackNotifier
: 슬랙에 알림 클래스MailNotifier
: 메일 알림을 하는 클래스class NotificationManager
def initialize(text)
@text = text
end
def notify_to_slack
SlackNotifier.new(@text).notify
puts 'ここで通知後の共通処理をしたい'
end
def notify_by_mail
MailNotifier.new(@text).notify
puts 'ここで通知後の共通処理をしたい'
end
end
class SlackNotifier
def initialize(text)
@text = text
end
def notify
# Slackに通知する処理
end
end
class MailNotifier
def initialize(text)
@text = text
end
def notify
# メールで通知する処理
end
end
# Slackに通知したいとき
NotificationManager.new('おはよう').notify_to_slack
# メールで通知したいとき
NotificationManager.new('おはよう').notify_by_mail
의존성 반전에 적용되는 원칙용어는 다음과 같다.NotificationManager
SlackNotifier
, MailNotifier
NotificationManager
는 많은 것을 너무 잘 안다.예를 들면 다음과 같다.SlackNotifier
또는 MailNotifier
라는 클래스가 있음SlackNotifier
또는 MailNotifier
가 text
를 속성으로 가지고 있음SlackNotifier
및 MailNotifier
방법notify
이 있음NotificationManager
라는 상급 모듈이 SlackNotifier
또는 MailNotifier
라는 하급 모듈에 의존한다는 것을 보여준다.의존성 역전의 원칙에 어긋난다는 것이다.이 원칙에 어긋나는 단점으로 신축
LineNotifier
같은 것을 고려하면 신축LineNotifier
뿐만 아니라 NotificationManager
방법도 준비해야 한다.해결책
notify_to_line
에서 NotificationManager
나SlackNotifier
를 호출하는 것이 아니라 준비MailNotifier
와 같은 추상(인터페이스)를 통해 없애는 것이다.class NotificationManager
# `notify`メソッドに応答できる`notifier`を渡すようにする
def initialize(notifier)
@notifier = notifier
end
def notify
notifier.notify
puts 'ここで通知後の共通処理をしたい'
end
end
# Slackに通知したいとき
slack_notifier = SlackNotifier.new('おはよう')
NotificationManager.new(slack_notifier).notify
# メールで通知したいとき
mail_notifier = MailNotifier.new('おはよう')
NotificationManager.new(mail_notifier).notify
의존성 반전에 적용되는 원칙용어는 다음과 같다.notifier
NotificationManager
notifier
몰라NotificationManager
와SlackNotifier
같은 반이 있었으면 좋겠어요.MailNotifier
라는 방법을 통해 notify
라는 추상(인터페이스)에 호응할 수 있다면 어떤 반이든 문제없다.반드시 준비해야 한다
notifier
LineNotifier
도 클래스와 LineNotifier
방법만 다시 만들면 된다notify
.의존성 주입과의 관계
용어가 비슷해 섞기 쉽지만 의존적 반전의 원칙(DIP)과 의존적 주입(DI)은 다른 개념이다.
의존성 주입(DI)은 해결 방안의 예에서 사용하는'
NotificationManager
이 notifier
initialize에서 교부될 때'의 기술(즉 외부에서 의존 대상을 주입하는 것)을 말한다.문장으로 관계성을 나타내면 의존성 주입(DI)을 사용해 의존성 반전을 없앴다는 원칙(DIP) 위반으로 표현할 수 있다.
참고 문헌
Reference
이 문제에 관하여(Ruby 쉽게 배우는 SOLID 원칙⑤ "의존성 역전의 원칙"), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/shuhei_takada/articles/7ea60cc7253c43텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)