코드로 우주평화

추상화는 복잡성을 이해하기 쉬운 수준으로 단순화하는 것 본문

나는 이렇게 본다/객체지향의 사실과 오해

추상화는 복잡성을 이해하기 쉬운 수준으로 단순화하는 것

daco2020 2022. 3. 29. 21:10

* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다. 설명을 위한 글이 아니므로 내용이 정확하지 않을 수 있습니다. 

 

제목 : 객체지향의 사실과 오해

저자 : 조영호

범위 : 03 타입과 추상화

 


 

요약 정리

  • 이해하기 쉽고 예측 가능한 수준으로 단순화하는 전략
  • 추상화란 불필요한 부분을 도려내가면서 본질(목적)을 드러나게 하는 과정이다.
  • 공통점은 취하고 차이점을 버리는 일반화를 통해 단순하게 만든다.
  • 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이다.
  • 공통적인 특성으로 묶은 것을 '개념'이라고 한다.
  • 개념은 세 가지 관점으로 이야기 할 수 있다.
    • 심볼 : 개념을 가리키는 명칭(ex. 트럼프카드) -> 명칭
    • 내연 : 개념의 완전한 정의(ex. 트럼프카드의 설명, 공통된 특징) -> 행동
    • 외연 : 개념에 속하는 객체 집합(ex. 트럼프 카드들) -> 집합
  • 어떤 객체가 어떤 개념에 포함된다면 그 객체를 그 개념의 '인스턴스'라고 부른다.
  • 개념은 '타입'이다. 
  • '타입 시스템'의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것이다.
  • 객체를 만들 때 가장 중요한 것은 다른 객체와 협력하기 위해 어떤 행동을 해야할지를 결정하는 것이다.
    • 동일한 행동을 수행할 수 있다면 그 객체들은 동일한 타입으로 분류할 수 있다.
    • 캡슐화 - 객체의 내부적인 표현은 철저하게 감춰진다. (내부 표현이 다르더라도 행동이 같다면 동일한 타입에 속한다)
  • 타입을 결정하는 것은 객체의 행동뿐이다.
  • 다형성 - 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 것을 말한다.
  • 객체가 외부에 제공해야하는 행동(책임)을 먼저 결정하고 데이터를 나중에 결정하는 것을 책임-주도 설계(RDD)라고 부른다.
  • 더 포괄적인 개념과 그 하위 개념은 일반화/특수화 관계라고 한다.
    • 일반화/특수화 관계를 결정하는 것은 객체의 상태가 아닌 행동이다.
    • 특수한 타입이란 자신만의 행동을 추가하는 타입을 가리킨다.
    • 내연(행동)과 외연(집합)의 크기는 반비례이다.
  •  일반화/특수화는 곧 슈퍼타입/서브타입이다.
    • 서브타입은 슈퍼타입을 대체할 수 있다. (상속받으므로)
  • 타입의 목적
    • 타입은 시간에 따른 객체의 상태 변경이라는 복잡성을 단순화할 수 있는 효과적인 방법이다.
  • 동적 모델, 정적 모델
    • 객체의 상태가 어떻게 변하고 어떻게 행동하는지를 포착하는 것이 동적 모델이라고 한다.
    • 객체의 상태가 아닌 객체가 속한 타입의 정적인 모습을 정적 모델이라고 한다.
    • 클래스를 작성하는 시점은 정적인 관점에서 접근하는 것.
    • 객체의 상태 변경을 추적하고 디버깅 하는 것은 동적 모델을 다루는 것.
    • 동적, 정적 모두 잘 다루어야 한다.
  • 객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체의 행동이다.
  • 객체의 타입을 구현할 수 있는 방법 중 하나가 클래스이다.

 

 

하고 싶은 말

  • 추상화란 결국 개발자가 인지할 수 있을 수준으로 단순화 시키기 위해 만들어진 것을 알게되었다.
  • 앞으로 객체를 만들 때는 어떤 행동이 필요한지 먼저 생각해보고 만들자.