티스토리 뷰
객체지향 설계의 5원칙 - SOLID
1. SRP (Single Responsibility Principle) : 단일 책임 원칙
2. OCP (Open Closed Principle) : 개방 폐쇄 원칙
3. LSP (Liskov Subsitution Principle) : 리스코프 치환 원칙
4. ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
5. DIP (Dependency Inversion Principle) : 의존 역전 원칙
이 원칙들은 응집도는 높이고, 결합도는 낮추는 객체지향의 설계를 재정립한 원칙들이다. 결합도는 응집도는 모듈간의 관계를 표현하는 개념이다.
여기서 모듈은 하나의 기능을 수행하는 단위로서, 프로그램 기능의 독립적인 단위라고 할 수 있다. 자바에서는 하나의 기능만을 담당하고 있는
클래스를 모듈이라 할 수 있다.
결합도는 클래스(모듈) 간의 상호 의존 정도를 의미한다. 예를들어 클래스 A와 클래스 B가 의존도가 높다면, A를 변경할 경우 B를 변경해야 할 가능성이 크다.
결국은 의존도가 높다는 것은 수정 및 유지보수가 어렵다는 것을 의미한다. 반대로 의존성이 낮다면 클래스 A와 클래스 B는 독립적이며, 서로의 기능에 영향을
미치지 않고, 데이터만 주고받기 때문에 수정 및 유지보수가 편하다.
응집도 하나의 클래스(모듈)에 존재하는 메소드 및 데이터 등의 구성요소 사이의 밀접한 정도를 의미한다. 응집도가 높은 클래스는 하나의 클래스 안에
기능적으로 밀접한 관계를 갖고 있는 요소들만 가지게 된다. 결국은 하나의 클래스는 한가지의 역할만 수행하고, 그 역할에 필요한 메소드와 데이터만을
가지게 된다. 하나의 클래스에 응집도가 낮은(서로 관계가 없는) 메소드와 데이터가 많다면 클래스를 분석할 때, 클래스의 정체성이 없기 떄문에
클래스의 기능을 파악하기가 어렵고, 코드에 대한 가독성이 떨어질 수 있다. 그렇기 때문에 응집도 높은 클래스는 하나의 역할에만 충실한 클래스이다.
|
|
단일 책임 원칙은 하나의 모듈은 하나의 역할만을 책임질 수 있도록 설계하는 것을 의미한다. 단일 책임 원칙은 객제지향의 4대 원칙 중 추상화와 가장
관련이 깊다. 추상화는 애플리케이션의 경계를 정하고, 클래스 및 메소드를 생성하기 때문이다. 그리고 하나의 클래스가 하나의 역할만을 담당한다는 것은
앞에서 정리한 응집도가 높은 설계라고 할 수있다. 왜냐면?! 클래스가 하나의 역할만을 담당한다면, 그 클래스의 구성요소는 오직 하나의 역할에만 필요한
구성요소이기 때문이다. 클래스를 설계할 때 이 클래스가 하나의 역할만을 담당하고 있는지를 고려하고 설계한다면 클래스의 이름을 명확하게 부여할 수 있고,
클래스의 이름만으로도 어떤 역할을 수행할지도 짐작할 수 도 있을 것이다. 그렇다면 코드에 대한 이해도도 높아지지 않을까?
'프로그래밍 도서' 카테고리의 다른 글
HTTP 완벽 가이드 - 캐시 (1) | 2019.01.09 |
---|---|
[HeadFirst - 디자인패턴] 2. 스트래티지 패턴 (0) | 2018.11.08 |
[HeadFirst - 디자인패턴] 1. 옵저버 패턴 (0) | 2018.11.07 |