ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향의 사실과 오해] 4. 역할, 책임, 협력
    책/객체지향의 사실과 오해 2023. 1. 13. 12:49
    반응형

    이번 장에서 설명하는 내용

    어떤 협력에 참여하냐에 의해 객체에 필요한 행동을 결정하고, 필요한 행동이 객체의 상태를 결정한다.

    객체를 설계하려면 협력부터 설계해야 한다.

    객체지향 설계에서는 역할, 책임, 협력이 중요하고, 여기에서 책임 주도 설계, 디자인 패턴, 테스트 주도 개발이 나왔다.


     

     

     

    1. 역할


    개발자 정다빈은 요구사항 A를 만들기 위해 코드를 작성하고 있다고 가정해보자. 그러면 아래와 같은 상황이 발생한다.

    1. 정다빈은 레노버 노트북 키보드에 손을 올려두고 타이핑을 한다.

    2. 레노버 노트북 키보드는 입력된 값을 레노버 노트북에 전송한다.

    3. 레노버 노트북는 모니터에 입력된 값을 표시한다.

    여기서 정다빈, 레노버 노트북 키보드, 레노버 노트북, 모니터는 객체이다.

     

    1장에서 말했듯이 각 객체는 언제든지 대체가 가능하다.

    현재 A를 만드는 사람이 정다빈이라고 해도, 정다빈이 일을 그만두면 일론 머스크가 A 업무를 맡을 수도 있고, 레노버 노트북이 고장나면 맥북 프로로 노트북을 대체할 수도 있다.

    객체를 정다빈, 일론 머스크, 레노버 노트북, 맥북 프로등 이렇게 구체적으로 명시하여 제한할 필요가 없다. 개발자, 노트북과 같이 역할을 이용하여 협력을 추상화할 수 있으면 협력을 단순화하여 유연하게 만들 수 있다.

    그래서 협력에서는 객체보다 역할이 더 중요하고, 역할은 객체지향 설계의 단순성(simplicity), 유연성(flexibility), 재사용성(reusability)을 뒷받침하는 핵심 개념이다.


     

     

     

    2.객체지향 설계 기법


    [책임 주도 설계, RDD]

    객체지향 설계의 핵심은 적절한 책임을 적절한 객체에게 할당하는 것이다.

    책임 주도 설계의 순서는 먼저 시스템의 책임을 객체의 책임으로 분할하는 것이다. 그리고 객체는 책임을 수행하면서 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체를 찾거나 역할을 만든다. 이후 객체에게 책임을 할당하여 협력을 하게 만든다.

    객체지향에서 제일 중요한 것은 역할, 책임, 협력으로 책임 주도 설계는 거기에 집중할 수 있는 설계 방식이다.


    [디자인 패턴]

    책임 주도 설계가 역할, 책임, 협력에 집중한다면 디자인 패턴은 그 집중한 결과물을 보여주는 것이다.

    디자인 패턴은 반복적으로 발생하는 문제와 그 문제에 대한 해법의 쌍으로 정의된다. 그래서 반복해서 일어나는 특정한 상황에서 어떤 설계가 왜 더 효과적인지에 대한 이유를 알 수 있게 된다.

    그래서 디자인 패턴을 공부하게 되면 책임 주도 설계의 절차를 순서대로 따르지 않고도 역할, 책임, 협력의 결과물을 빠르게 파악할 수 있다.


    [테스트 주도 개발, TDD]

    테스트 주도 개발은 현재 실패하고 있는 테스트를 작성하고, 이 테스트를 통과하는 가장 간단한 코드를 작성한 뒤에 리팩터링을 거쳐 중복을 제거하는 설계 기법이다. 이 방법은 응집도가 높고, 결합도가 낮은 클래스로 구성된 시스템을 개발할 수 있기 때문에 가장 이상적인 개발 방법이지만, 초보자들은 테스트를 어떤 식으로 작성해야 하는지 큰 어려움을 느낄 수 있다.

    테스트 주도 개발은 책임 주도 설계의 기본 개념을 따르지만, 책임 주도 설계로 진행하면 오래 걸리는 절차를 빠르고 효율적으로 진행할 수 있는 방법이다. 특히 테스트 주도 개발로 얻을 수 있는 부가 기능인 테스트를 통해서 시스템을 견고하게 만들 수 있기 때문에 최상의 방법론이라고 말할 수 있다.

    여기서도 가장 중요한 것은 역할, 책임, 협력으로 객체지향에 대해 얼마나 알고 있냐에 따라 매우 이상적으로 개발을 진행할 수 있다.


    반응형

    댓글

Designed by Tistory.