3. 타입과 추상화
추상화 = 단순화 : 동적인 객체들을 단순화시켜 정적인 타입으로 갈무리하는 것
타입의 개념을 이해하면, 객체를 구현하기 위해 클래스를 사용하는 이유를 이해하게 될 것
추상화
- 사물들 간의 공통점은 취하고 차이점은 버리는, 일반화를 통한 단순화
- 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순화
- 복잡성을 이해하기 쉽게 단순화하는 것이 목적.
개념
- 공통점을 기반으로 객체들을 묶기 위한 그릇, 개념!
- 개념을 이용해 객체를 여러그룹으로 분류! 할 수 있다.
- 객체에 어떤 개념을 적용할 수 있고, 객체가 그 개념 그룹의 일원이 될 때 객체는 그 그룹의 인스턴스!
- 즉 객체란 특정한 개념을 적용할 수 있는 구체적인 사물이고, 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다.
타입(=개념)
- 객체 어떤 행동을 하느냐에 따라 객체의 타입이 결정된다.
- 그 객체가 어떤 데이터를 갖고 있는지는 중요하지 않고, 그 객체가 다른 객체와 동일한 데이터를 갖고 있더라도 다른 행동을 한다면 서로 다른 타입이다.
- 객체의 타입은 객체의 내부 표현과 아무런 상관이 없다.
- 동일한 메시지에 대해 서로 다른 방식으로 처리하더라도, 동일한 행동(책임)을 갖고 있다면 동일한 타입에 속한다.
- 메시지를 처리하는 방식은 서로 다를 수 밖에 없다. → 다형성
일반화/특수화 관계
- 일반적인 타입 : 상대적으로 집합의 크기는 더 크고, 행동의 수는 적다. = 슈퍼타입
- 특수한 타입 : 집합의 크기는 작지만, 행동의 수는 일반적인 타입보다 많다. = 서브타입
- 서브타입은 슈퍼타입의 행동과 호환되기 때문에 슈퍼타입을 대체할 수 있다.
즉, 어떤 타입의 서브타입이 되려면 “그” 어떤 타입을 대체할 수 있어야 한다.
→ 리스코브 원칙
클래스
- 타입 : 객체를 분류하기 위해 사용하는 개념
- 클래스 : 타입을 구현할 수 있는 구현 메커니즘 중 하나
4. 역할, 책임, 협력
객체들은 협력에 참여하기 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행한다.
객체지향이라는 말에서 클래스와 상속을 떠올리겠지만, 핵심은 역할, 책임, 협력!
협력
- 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.
- 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다.(객체가 할 의무)
책임
- 어떤 대상에 대한 요청은, 그 대상이 요청을 처리할 칙임이 있음을 암시한다.
- 객체의 책임은 객체가 무엇을 알고 있는가와 무엇을 할 수 있는가로 구성된다.
역할
- 역할을 사용해, 여러 협력을 포괄할 수 있는 하나의 협력으로 추상화할 수 있다.
- 역할을 대체할 수 있으려면, 동일한 메시지(요청/행위)를 이해할 수 있어야 한다.