추상화
어떤 양상, 세부사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
- 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다.
- 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거함으로써 단순하게 만드는 것이다.
개념
공통점을 기반으로 객체들을 묶기 위한 그릇이며 개념은 객체들의 복잡성을 극복하기 위한 추상화 도구이다
개념을 이용하면 객체를 여러 그룹으로 분류할 수 있는데 각 객체는 특정한 개념을 표현하는 그룹의 일원으로 포함되는데 이때 객체를 그 개념의 인스턴스라고 한다.
객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다. 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다.
개념의 세 가지 관점
- 심볼: 개념을 가르키는 이름
트럼프
- 내연:개념의 의미를 나타낸다. 개념을 객체에게 적용할 수 있는지 여부를 판단하기 위한 조건
앨리스의 이야기에서 몸이 납작하고 두 손과 두 발이 네모난 몸 모서리에 달려 있다는 트럼프에 대한 설명
- 외연:개념에 속하는 모든 객체들의 집합
정원사,병사,신하,왕자와 공주,하객으로 참석한 왕과 왕비들, 히트 잭, 히트 왕과 히트 여왕
- 개념이 심볼, 내연, 외연으로 구성돼 있다는 사실보다는 개념을 이용해 객체를 분류(class) 할 수 있다는 사실이 더 중요하다.
분류
- 분류란 특정 객체를 특정 개념의 객체의 집합에 포함시키거나 포함시키지 않는 작업을 의미한다.
- 어떤 객체를 어떤 개념으로 분류할지가 객체지향의 품질을 결정한다.
- 분류는 추상화를 위한 도구이다.
타입
타입은 개념과 동일하다. 따라서 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다. 어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고한다. 타입의 인스턴스는 타입을 구성하는 외연인 객체 집합의 일원이 된다.
타입은 데이터가 어떻게 사용되느냐에 관한 것이다.
어떤 데이터에 어떤 연산자를 적용시킬 수 있느냐가 그 데이터 타입을 결정한다.
ex)숫자형 데이터가 숫자형인 이유는 데이터를 더하거나 빼거나 곱하거나 나눌 수 있기 때문
문자열 데이터가 문자열인 경우는 두 데이터를 연결해 새로운 문자열을 만들 수 있기 때문타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰진다.
ex) 데이터 타입의 표현은 연산 작업을 수행하기에 가장 효과적인 형태가 선택되며, 개발자는 해당 데이터 타입의 표현 방식을 몰라도 데이터를 사용하는 데 지장이 없다.
객체와 타입
객체는 데이터가 아니다.객체에게 중요한 것은 객체의 행동이다.
- 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.
어떤 객체들이 동일한 행동을 수행할 수 있다면 그 객체들은 동일한 타입으로 분류될 수 있다.
- 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
객체의 행동을 가장 효과적으로 수행할 수만 있다면 객체 내부의 상태를 어떤 방식으로 표현하더라도 무방하다.
행동이 우선이다.
동일한 책임을 수행하는 일련의 객체는 동일한 타입에 속한다.
- 동일한 타입으로 묶는 기준
객체가 타입에 속한 다른 객체와 동일한 행동을 하면 됀다.
만약 동일한 데이터를 가지고 있더라도 다른 행동을 한다면 그 객체들은 서로 다른 타입으로 분류돼야 한다.
- 동일한 행동이란 동일한 책임을 의미하며, 동일한 책임이란 동일한 메시지 수신을 의미한다.
다형성
동일한 요청에 서로 다른 방식으로 응답할 수 있는 능력
내부 표현 방식이 다르더라도 동일한 메시지를 수신하고 처리할 수 있는데 이는 다형성에 큰 의미를 부여한다.
다형적인 객체들은 동일한 타입에 속한다.
캡슐화
외부에는 행동만을 제공하고 데이터는 행동 뒤로 감춘다.
행동에 따라 객체를 분류하기 위해서는 객체가 내부적으로 관리해야하는 데이터가 아닌 객체 외부에 제공해야하는 행동을 먼저 생각해야 한다.
객체가 외부에 제공해야 하는 책임을 먼저 결정하고 책임을 수행하는데 필요한 데이터를 나중에 결정한 후 책임을 수행하는데 필요한
외부 인터페이스 뒤로 데이터를 캡슐화한다.
타입의 계층
일반화/특수화 관계
'일반적'이라는 말은 더 포괄적임을 의미하며 일반화와 특수화는 동시에 일어난다.
일반화/특수화 관계는 상태를 표현하는 데이터가 아닌 행동으로 결정짓는다.
일반적인 타입 : 특수한 타입이 가진 모든 행동들 중에서 일부 행동만을 가지는 타입 더 적은 수의 행동을 가지지만, 더 큰 크기의 외연 집합을 가진다.
특수한 타입 : 일반적인 타입이 가진 모든 타입을 포함하지만 자신만의 행동을 추가하는 타입
슈퍼타입과 서브타입
일반적인 타입을 슈퍼타입이라하고, 특수한 타입을 서브타입이라 한다.
서브타입은 슈퍼타입의 행위와 호환되기 때문에 서브타입은 슈퍼타입을 대체할 수 있어야 한다.
일반화는 추상화를 위한 도구다.
정적 모델
타입의 목적
시간에 따라 동적으로 변하는 객체의 복잡성을 극복하기 어렵기 때문이다.
상태에 복잡성을 부과하는 요소(값)를 제거해 값에 독립적인 정적인 모습으로 만든다.
그래서 타입은 추상화이다.
동적 모델과 정적 모델
동적모델
스냅샷이란 객체가 특정 시점에 구체적으로 어떤 상태를 가지느냐를 의미한다.
스냅샷처럼 객체의 상태가 어떻게 변하고 행동하는지를 포착하는 것이다.
정적 모델
객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현하는 것을 타입모델이라 하는데, 객체의 상태가 아닌 객체가 속한 타입의 정적 모습을 표현하기 때문에 정적 모델이라 한다.
객체 관점의 동적 모델과 객체를 추상화한 타입 관점의 정적 모델을 적절히 혼용해야 한다.
클래스
정적인 모델은 클래스를 이용해 구현한다. 타입을 구현하는 가장 보편적 방식은 클래스이다.
'그룹 스터디 공부(IT 서적) > 객체지향의 사실과 오해' 카테고리의 다른 글
05 / 책임과 메시지 (0) | 2023.07.21 |
---|---|
04 / 역할, 책임, 협력 (0) | 2023.07.21 |
02-1 / 이상한 나라의 객체(요약) (0) | 2023.07.21 |
02 / 이상한 나라의 객체 (0) | 2023.07.21 |
01 / 협력하는 객체들의 공동체 (0) | 2023.07.21 |