콘텐츠로 이동

2021 04 11

2021-04-11

Interface Segregation Principle (인터페이스 분리 원칙)

  • 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다 - 클라이언트는 자신이 사용하는 메서드에만 의존해야 한다
  • 자신이 사용하는 메서드에만 의존해야 한다
  • 클라이언트 입장에서 사용하는 기능만 제공하도록 인터페이스를 분리해야 함 - 인터페이스를 분리하는 기준이 클라이언트가 되어야 한다 - 클라이언트가 사용하는 기능을 중심으로 인터페이스를 분리함으로써, 클라이언트로 부터 발생하는 인터페이스 변경의 여파가 다른 클라이언트에게 미치는 영향을 최소화

Dependency Inversion Principle (의존 역전 원칙)

  • 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다 - 고수준 모듈: 어떤 의미 있는 단일 기능을 제공하는 모듈 - ex. 가격 계산 모듈 - 저수준 모듈: 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능의 실제 구현 - ex. 개별적인 쿠폰 구현
  • 쿠폰을 이용한 가격 계산 모듈이 개별적인 쿠폰 구현에 의존하게 되면... - 새로운 쿠폰 구현 추가/변경에 따른 가격 계산 모듈 변경이 불가피 - 프로그램 변경 어려워짐 - 따라서 추상화를 하고, 거기에 concrete class가 의존하도록 만들자 - 고수준의 모듈의 변경없이 저수준을 변경할 수 있는 유연함 획득 - 이거 디자인 패턴에서 많이 보던건데...?

SOLID

  • 정의 - 변화에 유연하게 대처할 수 있는 설계 원칙
  • SRP, ISP - 객체가 커지지 않도록 막아줌 - 객체가 단일 책임을 가지고, 클라이언트마다 다른 인터페이스를 사용함으로써, 한 기능의 변경이 다른 곳에까지 미치는 영향을 최소화한다 - 이는 곧 기능 변경을 쉽게 만들어준다는 것
  • OCP <-- DIP, LSP - 개방 폐쇄 원칙으로, 변화되는 부분을 추상화함 - 변화되는 부분을 추상화해주는 것이 DIP - 다형성을 이용해 기능 확장하면서도 기존 코드 수정하지 않도록 함 - 다형성을 도와주는 원칙이 LSP
  • 사용자 입장에서의 기능 사용을 중시