객체지향의 사실과 오해 | 조영호 - 교보문고
객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝
product.kyobobook.co.kr
추상화를 통한 복잡성 극복
지하철 노선도의 변화 : 얼마나 사실적으로 지형을 묘사했느냐 → 역과 역사이의 연결성을 얼마나 직관적으로 표현했느냐
진정한 의미에서 추상화란, 지하철 노선도처럼 불필요한 부분을 도려내면서 복잡한 부분을 단순화시켜 사물의 본질을 드러나게 하는 과정이다.
추상화
어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
- 첫 번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다.
- 두 번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다.
객체지향과 추상화
앨리스는 하트여왕, 신하들, 공주와 왕자들을 모두 ‘트럼프’라고 지칭하고 있다.
왜? → 그들의 차이점은 무시한 채 트럼프라는 유사성을 기반으로 추상화해서 바라보기 때문
결과적으로 앨리스는 인물을을 두 개의 그룹으로 나누었다 : 트럼프와 토끼
추상화하여 정원을 바라본 것은 정원에 내제된 복잡성을 효과적으로 감소시켰다.
개념
앨리스가 인물들의 차이점을 무시하고 공통점만을 취해 단순화한 것은 추상화의 일종이다.
- 개념 : 공통점을 기반으로 객체들을 묶기 위한 그릇
- 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념
- 개념을 이용하면 객체를 여러 그룹으로 분류할 수 있다
- 인스턴스 : 객체가 어떤 개념 그룹의 일원이 될 때
💡 객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다.
개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다.
객체의 세 가지 관점
- 심볼(symbol)
- 개념을 가리키는 간략한 이름이나 명칭
- 앨리스에서 트럼프
- 내연(intension)
- 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할수 있다.
- 앨리스 - 몸이 납작하고 두손과 두발이 네모난 몸 모서리에 달려 있다는 트럼프에 대한 설명
- 외연(extension)
- 개념에 속하는 모든 객체의 집합(set) / 개념의 인스턴스들의 집합
- 앨리스 - 정원사, 병사, 신하, 왕자와 공주, 하트 왕과 하트 여왕 등
💡 분류란 객체에 특정한 개념을 적용하는 작업이다.
객체에 특정한 개념을 적용하기로 결심했을 때 우리는 그 객체를 특정한 집합의 멤버로 분류하고 있는 것이다.
적절하게 분류된 앱은 유지보수가 용이하고 변경에 유연하게 대처할 수 있다.
결국 분류는 추상화를 위한 도구이다.
타입
타입은 개념이다
- 타입은 개념을 대체할 수 있는 세련된 용어이다. but 기계적인 의미를 가짐
데이터 타입
타입 시스템의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것이다.
메모리 안에 저장된 0과 1에 대해 수행 가능한 작업과 불가능한 작업을 구분 → 잘못 사용 방지
- 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정한다
- 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰진다
- 단지 해당 데이터 타입에 적용할 수 있는 연산자만 알면 됨
객체와 타입
객체를 타입에 따라 분류하고 그 타입에 이름을 붙이는 것은 결국 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것과 같다.
- 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.
- 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
행동이 우선이다
객체가 어떤 행동을 하느냐에 따라 객체의 타입이 결정된다. 객체의 타입은 객체의 내부 표현과는 아무런 상관이 없다.
- 즉, 객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 동일한 타입에 속한다.
- 다형성 : 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력
- 다형적인 객체들은 동일한 타입에 속한다.
- 책임-주도 설계 : 객체가 외부에 제공해야 하는 책임을 먼저 결정하고, 그 책임을 수행하는 데 적합한 데이터를 나중에 결정한 후, 데이터를 책임을 수행하는 데 필요한 외부 인터페이스 뒤로 캡슐화해야 한다.
타입의 계층
트럼프 하위에 트럼프 인간 → 트럼프 인간을 포함하는 개념 사이의 관계 = 일반화/특수화 관계
일반화/특수화 관계
- 일반화/특수화 관계를 결정하는 것은 행동이다
- 일반적인 타입은 특수한 타입보다 더 적은 수의 행동을 가지고 특수한 타입은 더 많은 수의 행동을 가진다.
- 단, 특수한 타입은 일반적인 타입이 할 수 있는 모든 행동을 동일하게 수행할 수 있어야 한다.
- 내연을 의미하는 행동의 가짓수와 외연을 의미하는 집합의 크기는 서로 반대이다.
- 행동의 수 : 일반<특수
- 집합의 크기 : 일반>특수
슈퍼타입과 서브타입
- 일반적인 타입을 슈퍼타입, 특수한 타입을 서브타입이라고 부른다.
- 서브타입은 슈퍼타입의 모든 행동을 수행할 수 있으므로 서브타입은 슈퍼타입을 대체할 수 있어야한다.
정적모델
타입의 목적
타입을 사용하는 이유는 인간의 인지 능력으로는 시간에 따라 동적으로 변하는 객체의 복잡성을 극복하기 어렵기 때문이다.
- 타입은 시간에 따라 동적으로 변하는 상태를 정적인 모습으로 다룰 수 있게 해준다,
- 즉 복잡성을 부과하는 요소를 제거함
💡 결국 타입은 추상화다
동적 모델과 정적 모델
- 스냅샷 : 객체 다이어그램. 객체가 특정 시점에서 구체적으로 어떤 상태를 가지느냐
- 동적 모델 : 스냅샷처럼 객체가 살아 움직이는 동안에 상태의 변화, 행동을 포착하는 것
- 정적 모델 : 타입 모델. 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현한 것
클래스
객체지향 프로그래밍 언어에서 정적인 모델은 클래스를 이용해 구현된다. 따라서 타입을 구현하는 가장 보편적인 방법은 클래스를 이용하는 것이다. 클래스는 타입을 구현할 수 있는 메커니즘일 뿐이지 타입이 아니다.
💡 객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동이다.
객체지향에서 중요한 것은 동적으로 변하는 객체의 ‘상태’와 상태를 변경하는 ‘행위’이다.
'객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 2. 이상한 나라의 객체 (0) | 2023.07.27 |
---|---|
[객체지향의 사실과 오해] 1. 협력하는 객체들의 공동체 (0) | 2023.07.27 |