단일 책임 원칙

위키백과, 우리 모두의 백과사전.

객체 지향 프로그래밍에서 단일 책임 원칙(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.