[개발] 기타

객체지향설계의 5원칙(SOLID)

브랜든정 2022. 7. 20. 11:38
반응형

좋은 소프트웨어 설계는 결합도가 낮고, 응집도가 높은 설계 방법을 의미한다.
응집도는 높이고 결합도는 낮추자는 5개의 원칙을 객체 지향 설계 원칙에 적용한 것이 객체지향설계의 5원칙이다.

 

결합도

  • 모듈(클래스)간의 상호 의존 정도를 나타내는 지표이다.
  • 결합도가 낮다는 것은 모듈 간의 상호의존성이 줄어들기 때문에 객체의 재사용과 유지보수가 유리하다는 것의 의미한다.

응집도

  • 하나의 모듈 내부에 존재하는 구성 요소들의 기능적인 관련성을 나타낸다.
  • 응집도가 높다는 것은 하나의 모듈에 책임을 집중시켜 독립성을 높이기 때문에 마찬가지로 객체의 재사용 및 유지보수가 용이해진다.

 

 

SRP(Single Responsibility Principle) - 단일 책임 원칙

  • 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화하여야 한다.

OCP(Open Closed Principle) - 개방 폐쇄 원칙

  • 자신의 확장에는 열려있어야 하고 주변의 변화에는 닫혀있어야 한다.
  • 즉, 변경되는 내용이 무엇인지에 초점을 맞춰야 한다는 것이다.
  • 자주 변경되는 내용이라면 수정하기 쉽도록 설계해야 하고, 변경되지 않아야 하는 것은 수정되는 내용에 영향을 받으면 안된다는 것이다.
  • 일반적으로 상위클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해 폐쇄적이지만 인터페이스는 외부 변화에 대해 확장을 개방해주는 경우가 있다.

LSP(Liskov Substitution Principle) - 리스코프 치환 원칙

  • B가 A의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경없이 A의 객체를 B의 객체로 교체(치환)할 수 있어야 한다.
  • 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 수행하는데 문제가 없어야 한다.

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

  • 클라이언트가 자신이 이용하지 않는 메소드에 의존하지 않아야 한다는 원칙이다.
  • 클래스 내에 사용하지 않는 인터페이스는 구현하지 않는다는 원칙으로, 자신이 사용하지 않는 기능에는 영향을 받으면 안된다는 의미이다.
  • 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메소드들만 이용할 수 있게 한다.
  • 인터페이스를 분리하여 설계하면, 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다.

DIP(Dependency Inversion Principle) - 의존 역전 원칙

  • 소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다.
  • 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전) 시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
  • 의존관계를 맺을 때, 변화하기 쉬운 것보다 변화하기 어려운 것에 의존해야 한다는 의미이다.
  • 여기서 말하는 변화하기 쉬운 것은 객체지향의 관점에서 보면 구체화된 클래스를 의미하고, 변화하기 어려운 것은 추상 클래스나 인터페이스를 의미한다.
  • 즉, 의존관계를 맺을 때에는 추상클래스나 인터페이스와 관계를 맺는다고 정리할수 있다.

 

반응형

'[개발] 기타' 카테고리의 다른 글

Tistory 에 SyntaxHighlighter 적용하기  (0) 2011.06.17
썬더버드 메일함 용량 초과시  (1) 2011.03.29