단일 책임 원칙

객체 지향 프로그래밍에서 단일 책임 원칙(single responsibility principle)이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.

이 용어는 로버트 마틴이 그의 저서 기민한 소프트웨어 개발과 원칙, 패턴, 실례[1]로 유명해진 객체 지향 설계 원칙[2]이란 문서의 같은 이름을 가진 단락에서 소개되었다. 로버트 마틴은 이를 톰 디마르코의 책 구조적 분석과 시스템 명세[3]에서 설명한 응집성 원칙에 근거하여 설명하였다.

로버트 마틴은 책임을 변경하려는 이유로 정의하고, 어떤 클래스나 모듈은 변경하려는 단 하나 이유만을 가져야 한다고 결론 짓는다. 예를 들어서 보고서를 편집하고 출력하는 모듈을 생각해 보자. 이 모듈은 두 가지 이유로 변경될 수 있다. 첫 번째로 보고서의 내용 때문에 변경될 수 있다. 두 번째로 보고서의 형식 때문에 변경될 수 있다. 이 두 가지 변경은 하나는 실질적이고 다른 하나는 꾸미기 위한 매우 다른 원인에 기인한다. 단일 책임 원칙에 의하면 이 문제의 두 측면이 실제로 분리된 두 책임 때문이며, 따라서 분리된 클래스나 모듈로 나누어야 한다. 다른 시기에 다른 이유로 변경되어야 하는 두 가지를 묶는 것은 나쁜 설계일 수 있다.

한 클래스를 한 관심사에 집중하도록 유지하는 것이 중요한 이유는, 이것이 클래스를 더욱 튼튼하게 만들기 때문이다. 앞서 든 예를 계속 살펴보면, 편집 과정에 변경이 일어나면, 같은 클래스의 일부로 있는 출력 코드가 망가질 위험이 대단히 높다.

같이 보기편집

출처편집

  1. Martin, Robert C. (2002). 《Agile Software Development, Principles, Patterns, and Practices》. Prentice Hall. ISBN 0-13-597444-5. 
  2. http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
  3. DeMarco, Tom. (1979). 《Structured Analysis and System Specification》. Prentice Hall. ISBN 0-13-854380-1.