오브젝트

Ch03. 객체지향 기본 원칙 - 표현적 차이 줄이기

webmaster 2024. 10. 1. 21:44
728x90

알고리즘과 절차적인/객체지향 설계 

절차적인 설계: 알고리즘의 각 단계를 단일 클래스 안에 실행 순서대로 배치

절차적인 설계와 알고리즘

객체지향 설계: 알고리즘의 각 단계를 책임 관점에서 여러 객체로 분배

객체지향 설계와 알고리즘

도메인 모델

  • 도메인 안에 존재하는 중요한 개념과 관계를 모아서 이해하기 쉽게 추상화시킨 것을 도메인 모델이라고 한다.
  • 여기서 추상화는 우리의 필요에 맞는 부분만 취하고 필요 없는 부분은 생략해서 단순화시킨 것을 의미한다.
  • 도메인 모델 안에 포함된 개념과 관계는 객체지향 설계에서 책임을 할당받을 객체의 이름과 관계에 대한 중요한 힌트를 제공한다.
  • 책임을 할당할 후보 객체를 찾을 떄 가장 먼저 참고할 수 있는 재료가 도메인 모델이 된다. 
    • 이유? 표현적 차이(도메인에 대한 개념적 모델과 소프트웨어 구현 사이의 거리)를 줄이기 때문
    • 표현적 차이를 줄인다면, 변경하기 쉽고 유연한 설계를 얻을 수 있다.(도메인의 개념과 기본 구조는 비즈니스가 바뀌지 않는 이상 그대로 유지가 되기 때문이다)
  • 은유는 책임을 수행하는데 적합한 객체를 도메인 개념과 연결시켜준다.
    • 도메인의 개념을 은유해서 객체와 클래스의 이름을 지으면 책임을 구현한 코드를 찾기가 수월해진다.(수정할 코드도 찾기 쉬워진다)

명사의 가치

  • 객체지향은 명사를 중심으로 동사들을 명사 안으로 모은다.
  • 명사를 이용해서 동사를 묶고 나면, 동사의 위치를 찾기 위해 명사를 이용할 수 있다. 그리고 이 명사를 객체의 이름으로 동사를 객체의 책임으로 대응시키고 나면,  요구사항이 변경될 때 어떤 책임을 수정해야 하고 이 책임이 수정될 때 어떤 클래스를 수정해야 하는지를 쉽게 찾을 수 있게 된다.

GRASP

CRC예시

  • 일반적인 책임 할당을 위한 소프트웨어 패턴을 의미한다.
  • 9가지 패턴이 포함이 되어있다.
    • Creator(생성자)
    • Indirection(간접화)
    • Information Expert(정보 전문가)
    • Polymporphism(다형성)
    • Low Coupling(낮은 결합도)
    • Protected Variations(변경 보호)
    • High Cohesion(높은 응집도)
    • Pure Fabrication(순수한 가공물)
    • Controller(컨트롤러)

CRC 카드: 책임과 협력을 표현하기 위한 객체지향 설계 도구, 객체 하나를 의미한다고 생각하면 된다,

CRC 카드는 실제로 수행하는 동적인 객체를 나타내는 것을 기억해야 한다.(클래스 X)

728x90