ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ch3. 타입과 추상화
    코딩은 주댕이로/객체지향의 사실과 오해 2022. 3. 9. 01:07

    추상화를 통한 복잡성 극복

    이 추상화가 유용했던 이유는 승객들이 지하철을 바라보는 모델과 일치했기 때문 → 역의 위치가 중요한 것이 아니라 역와 역 사이의 연결이 중요하다고 생각함

    추상화

    특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.

    복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다[Kramer 2007].

    • 첫 번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다.
    • 두 번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다.

    객체지향과 추상화

    ‘기껏해야 트럼프에 불과해' 모든 트럼프 객체를 ‘트럼프'로 일반화 하였음

    사람들은 본능적으로 공통적인 특성을 기준으로 객체를 여러 그룹으로 묶어서 생각

    공통점을 기반으로 객체들을 묶기 위한 그릇을 개념(concept)이라고 한다. 앨리스는 납작하고 네모난 객체를 ‘트럼프'라는 개념으로 추상화했다.

    Ex) 트럼프, 자동차, 비행기, 모니터

    개념을 이용하면 객체를 여러 그룹으로 분류(classification)할 수 있다.

    하트 여왕은 ‘트럼프'라는 개념 그룹의 일원이다. 이처럼 객체에 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 때 객체를 그 개념의 인스턴스(instance)라고 한다.

    객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다. 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다.

    개념의 세 가지 관점

    객체의 분류장치로서의 개념

    • 심볼(symbol): 개념을 가리키는 간략한 이름이나 명칭
    • 내연(intension): 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다
    • 외연(extension): 개념속에 속한 모든 객체의 집합

    트럼프

    • 심볼(symbol) : 트럼프
    • 내연(intension) : 몸이 납작하고 두 손과 두 발은 네모 귀통이에 달려 있는 등장인물
    • 외연(extension) : 정원사, 병사, 신하, 왕자와 공주, 하객으로 참석한 옹과 왕비들, 히트잭, 하트 왕과 하트 여왕

    자동차

    • 심볼(symbol): 자동차
    • 내연(intension): 길거리를 빠른 속도로 누비는 교통수단
    • 외연(extension): 내 차, 님 차, 저기 지나가는 버스

    클래스

    • 심볼: 클래스명
    • 내연: 클래스의 책임, 역할
    • 외연: 클래스로 생성한 인스턴스

    객체를 분류하기 위한 틀

    분류란 객체에 특정한 개념을 적용하는 작업이다. 객체에 특정한 개념을 적용하기로 결심했을 때 우리는 그 객체를 특정한 집합의 멤버로 분류하고 있는 것이다.

    객체를 적절히 분류하지 못한 애플리케이션은 유지보수가 어렵고 변화에 쉽게 대처하지 못한다.

    적절한 분류는 개발자에게 정신적인 지도를 제공한다는 것이다.

    타입

    개념을 컴퓨터 공학자들은 타입(type)이라고 한다.

    타입은 개념과 동일하다. 따라서 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다. 어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다. 타입의 인스턴스는 타입을 구성하는 외연인 객체 집합의 일원이 된다.

    타입에 관련된 두 가지 사실

    1. 타입은 데이터가 어떻게 사용되느냐에 관한 것 (데이터가 수행할 수 있는 연산에 대한 이야기)
    2. 타입에 속한 데이터가 어떻게 메모리에 표현되는지 알 필요가 없다.

    객체와 타입

    객체는 데이터? ㄴㄴ 객체에서 중요한 것은 객체의 행동이다. → 계속 반복

    위 두 가지 진실을 객체의 타입에 대입해보면

    1. 어떤 객체가 어떤 타입인지 결정하는 것은 그 객체의 수행하는 행동에 달려있다.
    2. 객체의 내부는 철저하게 감춰진다. 서로 다른 객체가 동일한 행동을 한다면 내부가 어떻게 되어있던 같은 타입으로 볼 수 있다.

    행동이 우선이다

    타입은 데이터가 아니라 행동에 의해 결정된다.

    같은 타입에 속한 객체는 행동만 동일하다면 서로 다른 데이터를 가질 수 있다. 동일한 행동이란 동일한 책임을 의미하며, 동일한 책임이란 동일한 메시지 수신을 의미한다. 내부 표현 방식이 다르기 때문에 메시지를 처리하는 방식은 다를 수 있다. 이것은 다형성에 의미를 부여한다.

    → 캡슐화

    설계할 때, 데이터가 아니라 객체가 외부에 제공해야하는 행동을 먼저 생각해야 한다.

    책임을 먼저 결정한 뒤 데이터를 결정해야 한다.

    타입의 계층

    앨리스가 분류한 트럼프는 트럼프가 맞는가? 트럼프 인간이라고 해야 맞다.

    트럼프 인간: 납작 엎드릴 수 있고 뒤집어질 수 있으며 걸을 때마다 몸이 펄럭인다.

    트럼프: 납작 엎드릴 수 있고 뒤집어질 수 있다.

    트럼프 인간은 트럼프의 모든 행동을 할 수 있고 추가적으로 걸어다닐 수 있다. 트럼프 인간은 트럼프가 될 수 있지만 트럼프는 트럼프 인간이 될 수 없다. (걷지 못함)

    일반화/특수화 관계 (generalization, specialization)

    트럼프는 트럼프 인간보다 일반적인 개념. 트럼프 인간은 트럼프보다 특수한 개념.

    일반화/특수화 관계를 결정하는 것은 객체의 데이터가 아니라 행동이다.

    어떤 객체가 다른 객체보다 더 일반적인 상태를 표현하거나 더 특수한 상태를 표현한다고 해서 두 객체가 속하는 타입 간에 일반화/특수화 관계가 성립하는 것은 아니다.

    슈퍼타입과 서브타입 (Supertype, Subtype)

    마찬가지로 행동에 의해서 관계가 결정된다.

    어떤 타입이 다른 타입의 서브타입이 된다면 다른 타입을 대체할 수 있어야 한다.

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

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

    ‘기껏해야 트럼프에 불과해’는 트럼프 인간의 걸어다니는 능력을 제거한 것

    앨리스의 추상화 2단계

    1. 정원의 등장인물의 차이점을 배제하고 공통점만을 강조하여 트럼프 인간으로 분류
    2. 트럼프 인간을 좀 더 단순하게 보기 위해 불필요한 특성을 배제하고 포괄적인 의미인 트럼프로 일반화

    정적 모델

    타입의 목적

    동적으로 변하는 객체의 복잡성을 극복하기 위해 타입을 사용한다.

    타입은 시간에 따라 동적으로 변하는 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 해준다.

    그래서 결국 타입은 추상화다

    어떤 시점에 시간이라는 요소와 상태 변화라는 요소를 제거하고 철저하게 정적인 관점에서 앨리스의 모습을 묘사하는 것을 가능하게 해준다.

    타입을 이용하면 객체의 동적인 특성을 추상화할 수 있다. 타입은 시간에 따른 객체의 상태 변경이라는 복잡성을 단순화할 수 있는 효과적인 방법인 것이다.

    동적 모델과 정적 모델

    객체가 특정 시점에 구체적으로 어떤 상태를 가지느냐 → 스냅샷(snapshot), 동적 모델(dynamic model)

    객체의 상태와 행동을 시간에 독립적으로 표현한 것 → 타입 모델(type model), 정적 모델(static model)

    클래스를 작성하는 시점에는 정적인 관점에서 접근

    런타임에 객체를 디버깅하는 동안에는 동적인 관점에서 접근

    클래스

    타입을 구현하는 가장 보편적인 방법. (클래스 ≠ 타입)

    '코딩은 주댕이로 > 객체지향의 사실과 오해' 카테고리의 다른 글

    Ch7. 함께 모으기  (0) 2022.04.04
    Ch6. 객체 지도  (0) 2022.03.09
    Ch5. 책임과 메시지  (0) 2022.03.09
    Ch2. 이상한 나라의 객체  (0) 2022.03.09
    Ch1. 협력하는 객체들의 공동체  (0) 2022.03.09
Designed by Tistory.