Dog foot print

[Architecture] S.O.L.I.D [D] 본문

Architecture

[Architecture] S.O.L.I.D [D]

개 발자국 2021. 5. 13. 22:29

서론 

지난 포스팅에 이어 마지막 DIP 에 대해서 포스팅 하겠습니다.

DIP :(Dependency Inversion Principle) 의존관계 역전 원칙 

 

의존성 역전 원칙에서 말하는 "유연성이 극대화된 시스템"이란 소스코드가 추상에 의존하며 구체에는 의존하지 않는 시스템을 의미한다. 추상 인터페이스에 변경이 생기면 이를 구체화한 구현체들도 따라서 수정해야 한다. 반대로 구체적인 구현체에 변경이 생기더라도 그 구현체가 구현하는 인터페이스는 항상 변경될 필요가 없다. 따라서 인터페이스는 구현체보다 변동성이 낮다. 즉 안정된 소프트웨어 아키텍처란 변동성이 큰 구현체에 의존하는 일은 지양하고, 안정된 추상 인터페이스를 선호하는 아키텍처라는 뜻이다. 

 

이 원칙을 구체적인 코딩 실천법으로 요약 하면 다음과 같다. 

 

  • 변동성이 큰 구체 클래스를 참조하지 말라
    • 대신 추상 인터페이스를 참조하자. 
  • 변동성이 큰 구체 클래스로부터 파생하지 말라. 
    • 상속은 정저 타입 언어에서 가장 강력하게 얽매이며, 동시에 뻣뻣하기 때문에 변경하기 어렵다. 즉 상속한 클래스가 변경이 된다면, 이는 시스템 전체에 영향을 미칠 가능성이 크다. 
  • 구체 함수를 오버라이드 하지 말라. 
    • 구체 함수는 소스 코드 의존성을 필요로 한다. 따라서 구체 함수를 오버라이드 하게 되면 의존성을 제거 할 수 없게되며, 실제로는 그 의존성을 상속하게 된다. 이런 경우, 추상 함수로 선언하고 구현체들에서 각자 용도에 맞게 구현해야 한다. 

 

즉, 구체적이며 변동성이 큰 것이 존재한다면 그 이름을 언급하지 않아야 한다. 

 

 

반응형

'Architecture' 카테고리의 다른 글

[GOF] 추상 팩토리 메서드 패턴  (0) 2021.10.23
[GOF] 팩토리 메서드 패턴  (0) 2021.10.17
[Architecture] S.O.L.I.D [I]  (0) 2021.05.11
[Architecture] S.O.L.I.D [L]  (0) 2021.05.06
[Architecture] S.O.L.I.D [S,O]  (0) 2021.04.30
Comments