객체지향 설계 기법

책임-주도 설계

"책임-주도 설계 방법은 협력에 필요한 책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식으로 애플리케이션을 설계한다."
  • 책임-주도 설계는 각 객체가 자신의 역할과 책임을 명확하게 갖도록 설계하는 방법입니다.

  • 쉽게 말해서 어떤 행동을 수행할지? 를 먼저 고민하고, 그 행동을 수행하는 객체를 정하는 방식이다.

  • 책임-주도 설계를 함으로써 시스템은 스스로 자신을 책임질 수 있을 정도로 충분히 자율적인 동시에 다른 객체와 우호적으로 협력할 수 있을 정도로 충분히 협조적인 객체들로 이뤄진 생태계를 구성할 수 있다.

책임-주도 설계 절차

  1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.

  2. 시스템 책임을 더 작은 책임으로 분할한다.

  3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.

  4. 객체가 책임을 수행하는 중에 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.

  5. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.

결론

  • 책임-주도 설계는 객체가 수행해야 할 책임을 먼저 결정한 후, 해당 책임을 수행하는 데 필요한 협력 관계를 설계하는 방식입니다.

  • 즉, 각 객체가 "무엇을 해야 하는가?"를 중심으로 역할을 정하고, 필요한 정보를 제공해줄 다른 객체(협력자)에게 적절히 책임을 위임하는 구조를 만드는 것이 핵심


디자인 패턴

  • 소프트웨어 설계에서 자주 발생하는 문제들을 해결하기 위해 정형화된 재사용 가능한 설계 방법

디자인 패턴의 특징

  • 재사용 가능 : 한 번 정리된 패턴은 여러 프로젝트에서 재사용할 수 있습니다.

  • 문제 해결 능력 향상 : 코드 구조를 체계적으로 설계하여 유지보수를 쉽게 할 수 있습니다.

  • 협업 용이성 : 디자인 패턴을 활용하면 개발자들 간의 의사소통이 원활해집니다.

COMPOSITE 패턴

여러 개의 객체를 하나의 그룹(계층 구조)으로 묶어 마치 하나의 객체처럼 다룰 수 있도록 하는 방법

  • Component : 클라이언트와 협력할 수 있는 공용 인터페이스를 정의하는 역할을 수행합니다.

  • Leaf : 공용 인터페이스에 대한 오퍼레이션 호출에 응답할 수 있는 기본적인 행위를 구현합니다.

  • Composite : 외부로부터 부분에 대한 세부 사항을 감추고 포함된 부분을 하나의 단위로 행동하는 역할을 합니다.

언제 사용하면 좋을까?

  • 계층 구조를 가진 데이터를 다룰 때 즉, 하나의 상위 요소가 여러 개의 하위 요소를 가질 때

  • 개별 객체와 그룹을 동일한 방식으로 처리하고 싶을 때

결론

  • COMPOSITE 패턴은 부분과 전체가 투명하고 동일한 인터페이스를 제공해야 한다는 제약하에서 식별된 역할, 책임, 협력을 제공하는 한 가지 설계 예제이다.

  • 따라서 디자인 패턴은 유사한 상황에서 반복적으로 적용할 수 있는 책임-주도 설계의 결과물이라고 할 수 있다.


테스트-주도 개발

코드를 작성하기 전에 먼저 테스트를 작성하는 방식

TDD의 기본 흐름

  • 테스트 작성 (Red): 먼저, 우리가 구현하고자 하는 기능에 대한 테스트를 작성. 이 테스트는 아직 구현되지 않았기 때문에 실패

  • 기능 구현 (Green): 그런 다음, 그 테스트를 통과할 수 있도록 실제 기능을 구현. 이때, 테스트가 성공

  • 리팩토링 (Refactor): 마지막으로, 코드가 잘 작동하는지 확인한 후, 코드를 깔끔하게 정리. 이때도 테스트는 그대로 통과

결론

  • 테스트-주도 개발은 먼저 원하는 기능에 대해 테스트를 작성하고, 테스트를 통과할 수 있도록 기능을 구현하는 과정을 거치며 리펙토링을 통해 유지보수성과 재사용성을 높인다.

Last updated