반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

지식조각모음

타입과 추상화 본문

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

타입과 추상화

y00 2023. 8. 14. 13:10
반응형

추상화를 통한 복잡성 극복

p.77
추상화란?
어떤 양상, 세부사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.

  • 불필요한 부분 생략
  • 공통점은 취하고 차이점을 버리는 일반화
  • 목적을 알 것

 


객체지향과 추상화

공통적인 특성을 가진 객체를 하나의 그룹으로 묶어서 취급해야 할 필요가 있다. 이때 필요한 것이 개념이다.

예를 들어 앨리스는 정원사, 병사, 신하, 왕자와 공주, 하객으로 참석한 왕과 왕비들, 하트 잭, 하트 왕과 하트 여왕을 ‘트럼프’라는 개념으로 추상화하였다. 일반적인 외형과 행동 방식을 하나의 그룹화하여 다른 객체와 구분하였다. 이렇게 트럼프라는 객체를 다른 그룹으로 분류할 수 있게 되었다. 그리고 정원사, 병사, 신하, 왕자와 공주, 하객으로 참석한 왕과 왕비들, 하트 잭, 하트 왕과 하트 여왕은 트럼프라는 개념의 인스턴스이다.


개념의 세 가지 관점

    • 심볼: 개념을 가리키는 간략한 이름이나 명칭
    • 내연: 개념의 완전한 정의. 내연의 의미를 통해 객체가 개념에 속하는지 확인
    • 외연: 개념에 속하는 모든 객체의 집합


이 말을 앨리스 예제로 바꿔보면 다음과 같다

    • 심볼: 트럼프
    • 내연: 몸이 납작하고 두 손과 두 발이 네모난 몸 모서리에 달려 있다
    • 외연: 정원사, 병사, 신하, 왕자와 공주, 하객으로 참석한 왕과 왕비들, 하트 잭, 하트 왕과 하트 여왕객체를 분류하기 위한 틀

객체는 개념에 적합해야 그 객체 집합에 포함된다 즉, 분류된다. 객체를 적절한 개념에 따라 분류해야 객체지향의 품질이 좋아진다.

p. 87
분류란?
객체에 특정한 개념을 적용하는 작업이다.

 

분류는 추상화를 위한 도구다

  1. 구체적인 사물 간의 공통점은 취하고 차이점을 버리는 일반화를 통해 단순화한다.
  2. 중요한 부분을 강조하기 위해 불필요한 부분은 제거하여 단순화한다.

타입

    • 타입 == 개념
p.89
타입은 개념과 동일하다. 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다. 어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다.

데이터 타입

사실 메모리 안의 데이터는 타입이 아니라 비트열로 구성되어 있다. 즉, 실제로 타입은 없다. 그렇지만 메모리에 저장된 것이 값인지, 숫자인지, 주소인지 등을 알아야 하므로 데이터의 목적에 따라 분류하였고 이것이 타입이다.

  • 타입에 대한 속성
    • 타입은 데이터가 어떻게 사용되느냐에 관한 것이다. 그 데이터에 어떤 작업을 할 수 있느냐가 결정된다.
    • 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부에서 알 수 없다. 하지만 사용하는 데는 지장없다.

객체와 타입

객체를 타입에 따라 분류하고 그 타입에 이름을 붙이는 것은 결국 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것과 같다.

  • 객체의 타입
    1. 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다. 동일한 행동을 수행하는 객체는 동일한 타입으로 분류된다.
      • 객체를 데이터의 타입처럼 사용하지만 데이터 타입과 완전히 같다는 것은 아니다. 이것 때문에 조금 헷갈렸다. 데이터 타입은 개발자가 편하기 위해 프로그래밍 언어에서 지정한 타입이다. 그래서 이미 지정되어있다. 하지만 객체는 개발자가 지정한다. 그러므로 특정 객체의 행동을 보고 타입을 정해야 한다.
    2. 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.

행동이 우선이다

두 객체가 같은 데이터를 가지고 있어도 행동이 다르면 다른 타입이다. 즉, 타입을 결정하는 것은 행동이다.
동일한 행동을 한다는 것은 동일한 책임을 가진다는 뜻이다. 책임이 같다는 것은 같은 메세지를 받을 수 있다는 뜻이다. 물론 행동만 같지 내부 데이터는 다를 수 있다. 같은 메세지를 받아도 다르게 처리할 수 있는데 이것을 ‘다형성’이라고 한다.

p. 93
다형성이란?
동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력

또한 좋은 객체지향 설계에서 객체는 행동만 제공하지 데이터는 공개하지 않는다. 어차피 메세지를 통해 협력하므로 데이터는 알려줄 필요도 없다. 이렇게 외부에 내부를 알리지 않는 것을 ‘캡슐화’라고 한다.


타입의 계층

앨리스는 정원사, 병사, 신하, 왕자와 공주, 하객으로 참석한 왕과 왕비들, 하트 잭, 하트 왕과 하트 여왕을 트럼프로 분류했다. 하지만 엄밀히 따지면 이들은 트럼프가 아니라 ‘트럼프 인간’이다. 그냥 트럼프와 동일하게 납작하고 뒤집을 수 있지만 그와 다르게 걷고 말할 수도 있다. ‘트럼프 인간’과 ‘트럼프’는 다르지만 트럼프 인간은 트럼프이기도 하다. 즉, 트럼프 인간은 트럼프에 속해 있다.

일반화/특수화 관계

  • 트럼프: 일반적인 개념, 범위가 포괄적임
  • 트럼프 인간: 트럼트를 좀 더 특수하게 표현, 범위가 더 좁다
  • 특수한 타입?
    • 일반적인 타입을 포함하지만 추가적인 행동을 하는 타입

슈퍼타입과 서브타입

  • 슈퍼타입: 일반적인 타입(트럼프)
  • 서브타입: 특수적인 타입, 슈퍼타입의 행위와 호환되어야 한다.(트럼프 인간)


정적 모델

앨리스의 키는 계속해서 변화한다. 이런 모든 상태를 기억하는 것은 어렵기 때문에 ‘앨리스의 키’라는 변경되는 상태를 기억하는 것이 더 알기 쉽다. 이런 추상화를 통해 동적으로 변하는 앨리스의 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 해준다.

이렇듯 객체는 두 가지 관점에서 고려할 수 있다.

  1. 동적 모델
    • 특정 시점에서 구체적으로 어떤 상태인가
    • 객체의 스냅샵
  2. 타입 모델
    • 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현
    • 정적 모델

클래스는 정적인 모델이다. 따라서 타입을 구현하는 가장 보편적인 방법은 클래스를 이용하는 것이다. 주의할 점은 그렇다고 클래스와 타입이 동일한 것은 아니라는 점이다. 타입은 객체를 분류하기 위한 것이고, 클래스는 그런 타입을 구현하는 방법 중 하나이다.


정리

- 객체의 목표를 알고 공통점은 취하고 차이점은 버려서 불필요한 부분을 생략하여 추상화를 한다.
- 이렇게 같은 개념으로 추상화 된 객체는 분류할 수 있다.
- 타입을 결정하는 것은 객체가 할 수 있는 행동이다.
- 타입은 같지만 메세지 처리 방식은 다를 수 있는데 이를 다형성이라고 한다.

 

반응형

' > 객체지향의 사실과 오해' 카테고리의 다른 글

객체 지도  (0) 2023.09.06
책임과 메시지  (0) 2023.08.31
역할, 책임, 협력  (0) 2023.08.17
이상한 나라의 객체  (0) 2023.08.08
협력하는 객체들의 공동체  (0) 2023.08.01