ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • single responsibility principle(단일 책임 원칙)
    프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 11:34

    # 객체 지향 프로그래밍에서 정의

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

    단일 책임 원칙은 로버트 마틴 객체 지향 설계 원칙이란 문서의 같은 이름을 가진 단락에서 소개되었다. 

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

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

    > 해석
    한 번 코드를 만들면 적어도 그 코드는 최소 10번 이상 다른 사람들에 의해 읽혀지게 된다. 그 과정에서 코드를 이해하고 변경하고 다양한 상황들이 생기는데, 각각의 모듈이 변경의 이유가 한 가지가 아니었을때 어려움이 발생한다.
    다음과 같은 상황을 생각해보자.
    상황: `팀원 한 명이 처음에 새로운 모듈 A을 만들어 프로젝트에 추가했다. 이후 다른 팀원이 기능에 대한 변경사항을 요청 받았는데 모듈 A를 수정해야한다.` 
    만약 모듈 A가 보고서 편집과 보고서 출력을 해주는 코드였고 변경해야할 것이 보고서 출력 부분을 변경하는 것 이었다면 코드를 변경하는 사람이 어떤 문제를 만나게 될까? 모듈 A에서 출력을 하는 코드 부분이 어딘지 파악하고 이와 관련된 코드만 건드리도록 노력을 해야한다. 또, 수정한 코드가 보고서 편집 코드를 건드렸는지도 주의하면서 코드를 수정해야 된다.

    이를 통해 알 수 있는 것은, 어떤 모듈을 만들 때 변경의 이유가 여러 가지로 늘어난다는 유지보수 함에 있어서 어려움을 만든다는 것을 인지하는 것이다.
     






    댓글

Designed by Tistory.