티스토리 뷰

객체지향 설계의 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는 독립적이며, 서로의 기능에 영향을
미치지 않고, 데이터만 주고받기 때문에 수정 및 유지보수가 편하다. 

응집도 하나의 클래스(모듈)에 존재하는 메소드 및 데이터 등의 구성요소 사이의 밀접한 정도를 의미한다. 응집도가 높은 클래스는 하나의 클래스 안에 
기능적으로 밀접한 관계를 갖고 있는 요소들만 가지게 된다. 결국은 하나의 클래스는 한가지의 역할만 수행하고, 그 역할에 필요한 메소드와 데이터만을
가지게 된다. 하나의 클래스에 응집도가 낮은(서로 관계가 없는) 메소드와 데이터가 많다면 클래스를 분석할 때, 클래스의 정체성이 없기 떄문에 
클래스의 기능을 파악하기가 어렵고, 코드에 대한 가독성이 떨어질 수 있다. 그렇기 때문에 응집도 높은 클래스는 하나의 역할에만 충실한 클래스이다.

 


  1. 기능적 응집도 : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
  2. 순차적 응집도 : 모듈 내의 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도
  3. 교환적 응집도 : 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모여 있을 경우의 응집도 (오버로딩)
  4. 절차적 응집도 : 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도
  5. 시간적 응집도 : 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도
  6. 논리적 응집도 : 유사한 성격을 가지거나 특정 형태로 분류되는 처리요소들로 하나의 모듈이 형성되는 경우의 응집도
  7. 우연적 응집도 : 모듈 내부의 각 구성요소들이 서로 관련 없는 다른 기능을 수행하는 경우의 응집도


마지막으로 객체지향 설계의 원칙 중 하나인, 단일 책임 원칙에 대해 정리하려고 한다. 
단일 책임 원칙은 하나의 모듈은 하나의 역할만을 책임질 수 있도록 설계하는 것을 의미한다. 단일 책임 원칙은 객제지향의 4대 원칙 중 추상화와 가장
관련이 깊다. 추상화는 애플리케이션의 경계를 정하고, 클래스 및 메소드를 생성하기 때문이다. 그리고 하나의 클래스가 하나의 역할만을 담당한다는 것은
앞에서 정리한 응집도가 높은 설계라고 할 수있다. 왜냐면?! 클래스가 하나의 역할만을 담당한다면, 그 클래스의 구성요소는 오직 하나의 역할에만 필요한
구성요소이기 때문이다. 클래스를 설계할 때 이 클래스가 하나의 역할만을 담당하고 있는지를 고려하고 설계한다면 클래스의 이름을 명확하게 부여할 수 있고,
클래스의 이름만으로도 어떤 역할을 수행할지도 짐작할 수 도 있을 것이다. 그렇다면 코드에 대한 이해도도 높아지지 않을까?


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함