출처 : 객체지향의 사실과 오해 조영호 저 | 위키북스
추상화를 통한 복잡성 극복
- 현재의 지하철 노선도는 불필요한 지형 정보를 제거하고 역 사이의 연결성을 강조함으로써 승객들의 목적에 맞게 현실을 단순화함 -> 추상화
- 추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 본질을 드러나게 하여 복잡도를 극복하는 과정
- 초기의 지하철 노선도 추상화이지만 지하철을 이용하는 승객들의 역과 역 사이의 연결관계를 알려는 목적에는 적합지 않았기 때문에 외면
추상화
- 공통점은 취하고 차이점은 버리는 일반화를 통해 단순화
- 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거하여 단순화
객체 지향과 추상화
- 이상한 나라의 왕, 왕비, 하트 잭, 신하 등 다양한 객체들을 계급, 나이, 성격 등의 차이점은 무시한 채 트럼프라는 유사성을 기반으로 추상화함
- 그들의 차이점을 무시하면 결국 트럼프인 것 -> 복잡성 감소
- 수많은 객체를 개별적인 단위로 취급하기에는 우리의 인지능력이 부족하기 때문에 공통적인 특성을 기준으로 객체를 여러 그룹(개념)으로 묶어 상황을 단순화함
- 객체에 어떤 개념을 적용하여 개념 그룹의 일원이 될 때 객체는 그 개념의 인스턴스가 된다.
개념의 세 가지 관점
- 심볼 : 개념을 가리키는 이름 -> 트럼프
- 내연(intension) : 개념의 완전한 정의 -> 몸이 납작하고 손발이 네모 귀퉁이에 달려 있는 등장인물
- 외연(extension) : 개념에 속하는 모든 객체의 집합 -> 정원사, 병사, 왕, 왕비 등
추상화의 도구, 분류
- 분류 : 객체에 특정한 개념을 적용하는 작업
- 어떤 객체를 어떤 개념으로 분류할지가 객체지향의 품질을 결정
타입 = 개념
- 타입 : 공통점을 기반으로 객체들을 묶기 위한 틀
- 메모리 안의 데이터에 특정한 의미를 부여하여 메모리 안의 모든 데이터가 잘못 사용되지 않도록 제약사항을 부과 -> 데이터 타입
- 데이터가 어떤 타입에 속하는지를 결정하는 것은 데이터에 적용할 수 있는 작업이다. -> 연산자
- 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정
- 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춤 -> 해당 데이터 타입의 표현 방식을 몰라도 그 타입을 알고만 있으면 사용가능
객체와 타입
- 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동 -> 동일한 책임(행동) = 동일한 타입
- 같은 타입에 속한 객체는 행동만 동일하면 서로 다른 데이터를 가질 수 있고, 내부의 표현이 다르더라도 동일한 메시지를 수신, 처리 가능 -> 다형적인 객체들은 동일한 타입 소속
- 객체의 내부적인 표현 캡슐화 -> 데이터가 캡슐의 벽을 뚫고 객체의 인터페이스를 오염시키는 순간 유연하지 못한 설계가 됨
타입의 계층
- 트럼프는 트럼프 인간보다 더 일반적인 개념 -> 일반화/특수화 관계
- 일반화/특수화 관계를 결정하는 것은 객체의 상태를 표현하는 데이터가 아닌 객체가 외부에 제공하는 행동
- 특수한 타입(서브 타입)은 일반적인 타입(슈퍼 타입)이 할 수 있는 모든 행동을 동일하게 수행 + 특화된 행동
- 어떤 타입이 다른 타입의 서브타입이 되기 위해서는 행위적 호환성을 만족시켜야 함 -> 서브타입은 슈퍼타입을 대체 가능해야 함
정적 모델
- 타입은 시간에 따라 동적으로 변하는 앨리스의 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 해준다
- 앨리스의 상태에 복잡성을 부과하는 시간이라는 요소를 제거하여 시간에 독립적인 정적인 모델을 만든다
- 객체가 살아 움직이는 동안 상태가 어떻게 변하고 행동하는 지를 보는 것 -> 동적 모델
- 객체가 가질 수 있는 모든 상태와 행동을 시간에 독립적으로 표현 -> 정적 모델
- 언어를 이용해 클래스를 작성하는 시점 -> 시스템을 정적인 관점에서 접근
- 애플리케이션을 실행해 객체의 상태 변경을 추적하고 디버깅 -> 동적인 관점
클래스
- 정적인 모델은 클래스를 이용해 구현되므로 타입을 구현하는 가장 보편적인 방법은 클래스를 이용하는 것
'JAVA > 객체지향의 사실과 오해' 카테고리의 다른 글
객체 지향의 사실과 오해 - 책임과 메시지 (0) | 2022.02.24 |
---|---|
객체 지향의 사실과 오해 - 역할, 책임, 협력 (0) | 2022.02.13 |
객체 지향의 사실과 오해 - 이상한 나라의 객체 (0) | 2022.02.11 |
객체 지향의 사실과 오해 - 협력하는 객체들의 공동체 (0) | 2022.02.06 |