프로젝트

일반

사용자정보

GRASP 요약

Prof. Jong Min Lee이(가) 약 한달 전에 추가함

아, 소프트웨어 디자인 원칙인 GRASP 패턴에 대해 궁금하시군요! GRASP는 객체 지향 설계 시 객체에게 책임을 할당하는 데 도움이 되는 9가지 기본 원칙(패턴)들의 모음입니다. 각 유형을 간략하게 요약해 드릴게요.

GRASP (General Responsibility Assignment Software Pattern) 유형 요약 설명:

  1. Information Expert (정보 전문가):

    • 핵심 아이디어: 어떤 책임을 수행하는 데 필요한 정보를 가진 클래스에게 그 책임을 할당합니다.
    • 설명: "무엇을 해야 하는가?"에 대한 답을 얻기 위해 필요한 데이터를 가장 잘 알고 있는 객체에게 책임을 맡기는 것이 자연스럽고 응집도를 높이는 방법입니다.
  2. Creator (생성자):

    • 핵심 아이디어: 객체를 생성해야 할 때, 어떤 클래스가 그 객체를 생성하는 책임을 맡아야 하는가에 대한 지침입니다.
    • 설명: 일반적으로 다음 중 하나에 해당하는 클래스가 객체 생성의 책임을 가집니다.
      • 생성되는 객체를 포함하거나 구성하는 클래스
      • 생성되는 객체를 긴밀하게 사용하는 클래스
      • 생성하는 데 필요한 초기화 정보를 가지고 있는 클래스
      • 객체 생성의 전문가인 클래스 (Factory)
  3. Controller (제어기):

    • 핵심 아이디어: 사용자 인터페이스로부터의 요청을 받아 애플리케이션 로직 객체에게 위임하거나 작업을 조정하는 책임을 할당합니다.
    • 설명: UI 객체와 비즈니스 로직 객체 사이의 결합도를 낮추고 관심사를 분리하는 데 도움이 됩니다. 주로 유스케이스별로 하나의 컨트롤러를 만들거나, 관련된 액션들을 처리하는 컨트롤러를 만듭니다.
  4. High Cohesion (높은 응집도):

    • 핵심 아이디어: 클래스가 관련된 책임들만 가져야 하며, 너무 많은 unrelated 된 책임을 가지지 않도록 설계합니다.
    • 설명: 높은 응집도는 클래스를 이해하고 유지보수하기 쉽게 만들고, 재사용성을 높이며, 변경에 더 강하게 만듭니다.
  5. Low Coupling (낮은 결합도):

    • 핵심 아이디어: 클래스 간의 의존성을 최소화하여 한 클래스의 변경이 다른 클래스에 미치는 영향을 줄입니다.
    • 설명: 낮은 결합도는 시스템을 더 유연하고 이해하기 쉽게 만들며, 변경이 발생했을 때 파급 효과를 줄여줍니다. 인터페이스, 추상 클래스 등을 활용하여 결합도를 낮출 수 있습니다.
  6. Polymorphism (다형성):

    • 핵심 아이디어: 객체의 타입에 따라 다르게 행동할 수 있도록 책임을 할당합니다.
    • 설명: 동일한 메시지를 보내더라도 객체의 실제 타입에 따라 다른 메서드가 실행되도록 설계하여 유연성과 확장성을 높입니다. 상속과 인터페이스를 통해 구현됩니다.
  7. Pure Fabrication (순수 가공):

    • 핵심 아이디어: Information Expert나 Creator 등의 다른 GRASP 패턴을 적용하기 어려울 때, 특정 책임을 수행하기 위해 인공적으로 만들어진 클래스에게 책임을 할당합니다.
    • 설명: 도메인 객체의 응집도를 높이고 결합도를 낮추기 위해 비즈니스 로직과 관련된 작업을 수행하는 유틸리티나 서비스 객체를 만드는 경우가 해당됩니다.
  8. Indirection (간접성):

    • 핵심 아이디어: 두 객체 사이의 직접적인 결합을 피하기 위해 중간 객체를 도입하여 책임을 할당합니다.
    • 설명: 중간 객체는 두 객체 사이의 인터페이스 역할을 하여 결합도를 낮추고 유연성을 높입니다. 예를 들어, Mediator 패턴이나 Observer 패턴이 간접성을 활용합니다.
  9. Protected Variations (보호된 변이):

    • 핵심 아이디어: 예상되는 변경 사항(변이)을 캡슐화하여 다른 부분에 영향을 주지 않도록 책임을 할당합니다.
    • 설명: 인터페이스나 추상 클래스를 사용하여 구현체를 숨기고, 변경될 가능성이 있는 부분을 안정적인 인터페이스 뒤에 감춤으로써 시스템의 안정성을 높입니다.

이 9가지 GRASP 패턴들은 객체 지향 설계를 할 때 어떤 객체에게 어떤 책임을 할당해야 할지에 대한 일반적인 지침을 제공하며, 좋은 객체 지향 설계를 만드는 데 중요한 역할을 합니다. 각 패턴은 특정 설계 문제에 대한 해결책을 제시하며, 함께 사용하여 더욱 견고하고 유연한 시스템을 구축할 수 있습니다.