[객사오] Chapter 3

추상화를 통한 복잡성 극복

  • 훌륭한 추상화는 목적에 부합하는 것이어야 한다.
  • 추상화란?
    • 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법
    • 복잡성을 다루기 위해 추상화는 두 차원에서 이루어 진다.
      1. 구체적인 사물 간 공통점은 취하고 차이점을 버리며 일반화를 통해 단순하게 만든다.
      2. 중요한 부분을 강조하기 위해 세부 사항을 제거해 단순하게 만든다.

객체지향과 추상화

그룹으로 나누어 단순화

  • 명확한 경계를 가지고 서로 구별할 수 있는 구체적인 사람이나 사물 = 객체
  • 공통적인 특성을 기준으로 객체를 여러 그룹으로 묶어 다뤄야 하는 가짓수를 줄인다.
  • 공통점을 기반으로 객체들을 묶기 위한 그릇 → 개념
  • 개념: 일반적으로 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념
    • 객체를 분류할 수 있는 틀을 제공
  • 개념을 이용하면 객체를 여러 그룹으로 분류 할 수 있게 된다.
  • 개념이 객체에 적용되었을 경우 객체를 개념의 인스턴스 라고 한다.

개념의 세가지 관점

  • 개념은 특정한 객체가 어떤 그룹에 속할 것인지 결정
  • 객체 분류장치로서의 개념 → 트럼프 예시
    • 심볼: 개념을 가리키는 간략한 이름이나 명칭
      • 트럼프
    • 내연: 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부 확인 가능
      • 납작하고 네모난 몸 모서리에 두손과 두 발일 달려있다.
    • 외연: 개념에 속하는 모든 객체의 집합
      • 정원사, 병사, 신하 등

객체를 분류하기 위한 틀

  • 분류: 특정한 객체를 특정한 개념의 객체 집합에 포함시키거나 포함시키지 않는 작업을 의미
  • 어떤 객체를 어떤 개념으로 분류할 지가 객체지향의 품질 결정
  • 최대한 직관적으로 분류해야한다.
  • 추상화의 두 가지 차원
    1. 구체적인 사물 간 공통점은 취하고 차이점은 버리는 일반화를 통해 단순화하는 것 → 개념
    2. 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거해 단순화하는 것 → 분류

타입

  • 공통점을 기반으로 객체들을 묶기 위한 틀 → 개념과 동일한 의미
    • 공통점을 기반으로 객체들을 묶기 위한 특

데이터 타입

  • 다뤄야 하는 데이터의 용도와 행동에 따라 분류한 것
    • 숫자형, 문자열형, 논리형

    → 메모리 안의 모든 데이터가 비트열로 보임으로써 야기되는 혼란을 방지

  • 결과적으로 타입 시스템의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것
  • 타입에 대한 중요한 사실
    1. 타입은 데이터가 어떻게 사용되느냐에 관한 것
      1. 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 데이터의 타입을 결정한다.
    2. 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰진다.
      1. 데이터 타입의 표현은 연산 작업을 수행하기 가장 효과적인 형태가 선택되며 개발자가 해당 데이터 타입의 표현 방식을 몰라도 데이터를 사용하는데 지장이 없다.

객체와 타입

  • 객체를 타입에 따라 분류하고 그 타입에 이름을 붙이는 것은 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것과 같다.
    • 그렇지만 객체를 데이터라고 할 수는 없음
  • 객체의 타입
    1. 어떤 객체가 어떤 타입에 속하는지 결정하는 것은 객체가 수행하는 행동
      • 어떤 객체들이 동일한 행동을 수행할 수 있다면 객체들은 동일한 타입으로 분류될 수 있다.
    2. 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
      1. 객체의 행동을 가장 효과적으로 수행할 수 있다면 객체 내부의 상태를 어떤 방식으로 표현하더라도 무방하다.

행동이 우선이다.

  • 객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 동일한 타입
  • 객체가 다른 객체와 동일한 데이터를 가지고 있더라도 다른 행동을 한다면 다른 타입
    • 객체가 어떤 데이터를 가지고 있는지는 타입을 결정하는데 영향 X
  • 객체의 타입이 데이터가 아닌 행동에 의해 결정된다는 사실은 객체지향 패러다임을 특징짓는 중요한 몇 가지 원리와 원칙에 의미를 부여한다.
    1. 동일한 행동이란 동일한 책임을 의미하며 동일한 책임이란 동일한 메시지 수신을 의미
      1. 동일한 타입에 속한 객체는 내부의 데이터 표현 방식이 달라도 동일한 메시지를 수신하고 처리 가능
      2. 내부의 표현 방식은 다르므로 동일한 메시지를 처리하는 방식은 다른다.

        다형성 에 의미 부여

    2. 데이터의 내부 표현 방식과 무관하게 행동만이 고려 대상 → 외부에 데이터를 감춰야 함을 의미
      1. 캡슐화 원칙

타입의 계층

일반화/특수화 관계

  • 트럼프 인간
    • 트럼프를 조 더 특수하게 표현한 것 → 일반적인 개념보다 범위가 더 좁다
    • 특수한 개념인 트럼프 인간은 점 더 일반적인 개념을 표현하는 트럼프의 부분 집합
  • 일반화/특수화 관계를 정의하는 것도 객체의 행동 이 중심
    • 행동의 관점에서 일반적인 타입: 특수한 타입이 가진 모든 행동들 중 일부 행동만을 가지는 타입
    • 특수한 타입: 일반적인 타입이 가진 모든 타입을 포함하지만 거기에 자신만의 행동을 추가하는 타입
    • 일반적인 타입은 특수한 타입보다 더 적은 수의 행동을 가지게 된다!

슈퍼타입과 서브타입

  • 슈퍼타입: 일반적인 타입
  • 서브타입: 특수한 타입
  • 서브타입은 슈퍼타이브이 행위와 호환되기 때문에 서브타입은 슈퍼타입을 대체할 수 있어야 한다.

일반화는 추상화를 위한 도구

  • 추상화의 두 번째 차원: 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거시켜 단순하게 만드는 것

    → 일반화/특수화 활용

  • 객체지향 패러다임을 통해 세상을 바라보는 경우 분류와 일반화/특수화 기법을 동시에 적용하게 된다.

정적 모델

타입의 목적

  • 시간에 따라 동적으로 변하는 객체의 복잡성을 극복하기 어려워 타입을 사용해야 한다.
    • 타입은 시간에 따라 동적으로 변하는 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 해준다.
    • 상태에 복잡성을 부과하는 시간의 요소를 제거해 시간에 독립적인 정적인 모습으로 앨리스를 생각할 수 있게 해준다.

    → 타입은 추상화이다.

    • 불필요한 시간 요소와 상태 변화라는 요소 제거
    • 철저하게 정적인 관점에서 객체를 묘사

동적 모델

  • 스냅샷: 객체가 특정 시점에 구체적으로 어떤 상태를 가지냐
    • 동적 모델: 객체가 살아 움직이는 동안 상태가 어떻게 변하고 어떻게 행동하는지 포착하는 것
  • 타입 모델: 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현하는 것
    • 정적 모델

클래스

  • 정적인 모델을 구현하는 방식
  • 타입을 구현하는 가장 보편적인 방식

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus