시배's Android

객체지향의 사실과 오해 | 7장. 함께 모으기 본문

Book/객체지향의 사실과 오해

객체지향의 사실과 오해 | 7장. 함께 모으기

si8ae 2024. 1. 7. 15:02
  • 개념 관점에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다.
  • 도메인이란 사용자들이 관심을 가지고 있는 특정 분야나 주제를 말하며 소프트웨어는 도메인에 존재하는 문제를 해결하기 위해 개발된다.
  • 명세 관점에 이르면 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점이 옮겨진다.
  • 구현 관점은 프로그래머인 우리에게 가장 익숙한 관점으로, 실제 작업을 수행하는 코드와 연관돼 있다.
  • 훌륭한 객체는 훌륭한 협력을 설계할 때만 얻을 수 있다.
  • 협력을 설계할 때는 객체가 메시지를 선택하는 것이 아니라 메시지가 객체를 선택하게 해야 한다.
  • 구현하지 않고 머릿속으로만 구상한 설계는 코드로 구현하는 단계에서 대부분 변경된다.
  • 협력을 구상하는 단계에 너무 오랜 시간을 쏟지 말고 최대한 빨리 코드를 구현해서 설계에 이상이 없는지, 설계가 구현 가능한지를 판단해야 한다.
  • 마틴 파울러는 개념적인 관점과 명세 관점 사이는 그렇게 중요하지 않은 경우가 많지만 명세 관점과 구현 관점을 분리하는 것은 매우 중요하다고 주장한다.
  • 분류와 인스턴스화 : 분류는 객체의 구체적인 세부 사항을 숨기고 인스턴스 간에 공유하는 공통적인 특성을 기반으로 범주로 형성하는 과정이다.
  • 일반화와 특수화 : 일반화는 범주 사이의 차이를 숨기고 범주 간에 공유하는 공통적인 특성을 강조한다. 일반화의 역을 특수화라고 한다.
  • 집합과 분해 : 집합은 부분과 관련된 세부 사항을 숨기고 부분을 사용해서 전체를 형성하는 과정을 가리킨다. 집합의 반대 과정은 전체를 부분으로 분리하는 분해 과정이다.
  • 클래스는 타입을 구현하는 용도 외에도 코드를 재사용하는 용도로 사용되기도 한다.
  • 어떤 타입이 다른 타입보다 일반적이라면 이 타입을 슈퍼타입 이라고 한다.
  • 어떤 타입이 다른 타입보다 좀 더 특수하다면 이 타입을 서브타입이라고 한다.
  • 한 타입이 다른 타입의 서브타입이 되기 위해서는 슈퍼타입에 순응 해야 한다는 것이다.
  • 순응에는 구조적인 순응 행위적인 순응 두 가지 종류가 있다.
  • 구조적인 순응의 경우 기대 집합은 속성과 연관관계에 관한 것이며, 행위적인 순응의 경우 기대 집합은 행위가 동일한 계약을 기반으로 하느냐에 관한 것이다.
  • 상속의 또 다른 용도는 코드 중복을 방지하고 공통 코드를 재사용하기 위한 언어적 메커니즘을 제공하는 것이다.