1. Intro
•
최초의 지하철 노선도
◦
목적과 무관한 사실적인 지형 정보를 혼합함으로써 중요한 정보(역 사이 연결성) 파악 힘듬
◦
사실적인 지형과 축척에 기반
•
해리 벡의 지하철 노선도
◦
지하철 노선도의 핵심(지도의 목적)에 집중
◦
연결. 열차를 갈아타는 것
•
지하철 노선도 추상화
◦
승객이 꼭 알아야 할 사실만 표현 (불필요한 정보는 무시)
◦
이해하기 쉽고 단순하며 목적에 부합한 노선도
2. 추상화를 통한 복잡성 극복
•
추상화: 본능적으로 이해하기 쉽고 예측 가능한 수준으로 현실을 분해하고 단순화 하는 전략
•
진정한 의미에서 추상화 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이다.[Root-Bernstein 2001].
•
추상화의 수준, 이익, 가치는 목적에 의존적이다.
•
현상은 복잡하다. 법칙은 단순하다. 버릴 게 무엇인지 알아내라.
•
Harry's Summary: 언제나 본질과 목적에 맞게 단순화하는 전략 (복잡도를 낮춤)
추상화란?
어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해, 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
추상화의 두 차원
1. 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다. (분류)
2. 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다. (일반화/특수화)
•
객체지향 패러다임
◦
객체라는 추상화를 통해 현실의 복잡성을 극복
3. 객체지향과 추상화
3.1 모두 트럼프일 뿐
•
앨리스와 하트 여왕이 최초로 마주치는 장면: 수많은 객체들의 등장.
•
객체는 제각기 독특한 모습을 하고 있으며, 독특한 행동 양식을 지님.
•
하얀 토끼 제외 ⇒ 모든 객체를 트럼프 하나의 개념으로 단순화함
◦
차이점(트럼프 정원 내 계급, 나이, 성격 등)은 과감하게 무시한 채 공통점 만을 취해 단순화.
3.2 그룹으로 나누어 단순화하기
•
객체지향 패러다임에서의 객체: 명확한 경계를 가지고 서로 구별할 수 있는 구체적인 사람이나 사물
◦
앨리스 내 트럼프 정원사, 병사, 신하, 왕자, 공주, 하객 등
•
다양한 인물들을 트럼프 로 단순화 가능 이유
◦
떠오르는 일반적인 외형과 행동 방식을 지니고 있기 때문
◦
즉, 그들의 차이점을 무시하면 트럼프라 지칭할 수 있음.
•
정원 내 트럼프 카드 등장인물들과 토끼를 트럼프 그룹 과 토끼 그룹 으로 나눔
◦
정원에 내재된 복잡성을 효과적으로 감소
3.3 개념
개념(concept)
공통점을 기반으로 객체들을 묶기 위한 그릇.
일반적으로 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 뜻함
분류(classification)
개념을 이용하면 객체를 여러 그룹으로 분류할 수 있다. (객체를 각 그룹에 포함되도록 분류)
개념은 공통점을 기반으로 객체를 분류할 수 있는 일종의 체
인스턴스(instance)
객체에 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 때 객체를 그 개념의 인스턴스라고 함
•
객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다. 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다.
•
개념으로 객체가 분류 되었을 때 그 개념의 인스턴스가 된다.
3.4 개념의 3가지 관점
•
심볼(symbol): 개념을 가리키는 간략한 이름이나 명칭
◦
트럼프
•
내연(intension): 개념의 완전한 정의를 나타냄. 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있음
◦
몸이 납작하며 두손과 두발은 네모 귀퉁이에 달려 있는 등장인물
•
외연(extension): 개념에 속하는 모든 객체의 집합(Set)
◦
정원사, 병사, 신하, 왕자와 공주, 하객 ...
•
개념을 구성하는 심볼, 내연, 외연은 객체의 분류 방식에 대한 지침을 제공
(개념을 이용해 객체를 분류할 수 있다는 사실이 더 중요 - 객체지향 패러다임이 복잡성을 극복하는 데 사용하는 기본적인 인지 수단)
3.5 객체를 분류하기 위한 틀
분류
- 객체에 특정한 개념을 적용하는 작업. 객체에 특정한 개념을 적용하기로 결심했을 때 우리는 그 객체를 특정한 집합의 멤버로 분류하고 있음
- 객체지향의 가장 중요한 개념: 어떤 객체를 어떤 개념으로 분류할지가 객체지향의 품질을 결정
- 객체를 적절한 개념으로 분류한 애플리케이션은 유지보수에 용이 & 변경에 유연하게 대처
3.6 분류는 추상화를 위한 도구다
•
개념: 객체들의 복잡성을 극복하기 위한 추상화 도구
4. 타입
4.1 타입은 개념이다
•
개념을 대체할 수 있는 세련돼 보이는 용어
•
타입의 정이는 개념의 정의와 완전히 동일
◦
심볼, 내연, 외연으로 서술 가능
◦
타입에 속하는 객체 → 타입의 인스턴스
타입
- 개념과 동일
- 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념
4.2 데이터 타입
•
컴퓨터 세계의 데이터 예시
◦
컴퓨터 세계에서는 타입이 없는 체계 안에 모든 데이터는 비트열로 구성되어 있음 (0과 1만 존재)
◦
비트열을 목적에 따라 분류 → 타입 시스템의 개념 적용
◦
타입 시스템의 목적: 데이터가 잘못 사용되지 않도록 제약사항 부과
•
타입의 특징
◦
타입은 데이터가 어떻게 사용되느냐에 관한 것 (연산 가능?)
◦
타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰짐(캡슐화)
데이터 타입
- 메모리안에 저장된 데이터의 종류를 분류하는데 사용하는 메모리 집합에 대한 메타 데이터
- 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 수행될 수 있는지를 결정함
4.3 객체와 타입
•
전통적인 데이터 타입과 객체지향의 데이터 타입에는 깊은 연관성이 있음
•
객체는 데이터가 아니다. 데이터는 행동을 하지 않기 때문
•
객체 지향 설계의 핵심은 객체간의 협력을 위해 어떤 행동을 해야할지를 결정하는 것
(객체가 협력을 위해 어떤 책임을 지녀야 하는지?)
•
객체의 타입의 특징
◦
객체가 수행하는 행동이 어떤 객체가 어떤 타입에 속하는지를 결정
(어떤 객체가 동일한 행동 수행 → 동일한 타입으로 분류될 수도 있음)
◦
객체의 내부적인 표현은 외부로부터 철저히 감춰짐
4.4 행동이 우선이다
•
행동 → 객체를 타입으로 분류할 때 사용해야 할 기준
◦
객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 그 객체들은 동일한 타입에 속함
◦
동일한 책임을 수행하는 일련의 객체는 동일한 타입에 속함
◦
동일한 데이터를 갖고 있더라도 다른 행동을 취하면 다른 타입으로 분류
◦
객체가 어떤 데이터를 보유하고 있는지는 타입을 결정하는데 아무런 영향을 미치지 않음
•
다형성
◦
동일한 행동 == 동일한 책임 == 동일한 메세지 수신
◦
동일한 타입에 속한 객체는 내부의 데이터 표현 방식/처리 방식은 다를 수 있으나 수신하고 처리는 가능
◦
다형성이란? 동일한 요청에 대하여 서로 다른 방식으로 응답할 수 있는 능력을 의미
◦
다형적인 객체들은 동일한 타입(타입 계층)에 속함
•
캡슐화
◦
데이터의 내부 표현 방식과 무관하게 행동만을 고려한다는 것 → 외부에 데이터를 감춰야한다는 것을 의미
◦
외부에 행동만을 제공하고 데이터는 행동 뒤에 감춤
•
책임 주도 설계
◦
행동에 따라 객체를 분류 하기 위해서는 객체가 외부에 제공 해야 하는 행동을 먼저 생각
▪
객체가 외부에 제공 해야 하는 책임을 먼저 결정 (커피 만들기)
▪
책임을 수행하기 위한 적합한 데이터를 나중에 결정 (카페 장소, 원두, 에스프레소 머신)
▪
데이터는 책임 수행을 위해 필요한 외부 인터페이스 뒤에 캡슐화
객체를 결정하는것은 행동이다.
데이터는 단지 행동을 따를 뿐이다.
5. 타입의 계층
5.1 트럼프 계층
•
일반화와 특수화
◦
트럼프: 트럼프 인간을 포괄하는 일반적인 개념
◦
트럼프 인간: 트럼프 보다 좀 더 특화된 행동을 하는 특수한 개념
5.2 일반화/특수화 관계
•
일반화와 특수화는 동시에 일어남
•
그 관계를 결정하는 건 객체의 상태를 표현하는 데이터가 아니라 행동이다.
•
일반적인 타입: 특수한 타입에 비해 더 적은 수의 행동을 가짐.
•
특수한 타입: 일반적인 타입에 비해 더 많은 행동을 가짐.
•
특수한 타입은 일반적인 타입이 할 수 있는 모든 행동을 동일하게 수행할 수 있어야 한다.(LSP)
5.3 슈퍼타입과 서브타입
•
슈퍼타입(Supertype): 일반적인 타입
•
서브타입(Subtype): 특수화 타입
•
두 타입의 관계는 행동에 의해 결정
•
어떤 타입을 다른 타입의 서브 타입이라고 말할 수 있으려면 다른 타입으로 대체 할 수 있어야한다 (Liskov)
5.4 일반화는 추상화를 위한 도구다
•
추상화의 두번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거시켜 단순화 시키는 것
•
일반화/특수화 계층은 두 추상화의 두번째 차원을 활용하는 대표적 예
•
객체지향의 패러다임을 통해 세상을 바라보는 거의 모든 경우에 분류와 일반화/특수화 기법을 동시에 적용
6. 정적 모델
6.1 타입의 목적
•
시간에 따라 동적으로 변하는 객체의 복잡성을 인간의 인지 능력으로 표현하기 위함
•
동적으로 변하는 상태를 정적인 모습으로 보여주게 함 (디버깅)
◦
앨리스 = 타입
◦
키 = 상태(동적으로 변하는 상태)
6.2 그래서 결국 타입은 추상화다
•
타입을 통해, 동적인 상태를 정적으로 보여주게 끔 함
◦
불필요한 요소(시간, 상태 변화)를 제거하여 어떤 시점의 모습(정적인 상태)을 묘사하는게 가능해짐.
•
타입을 통해 객체의 동적인 특징을 추상화 가능
•
타입은 시간에 따른 객체의 상태 변경이라는 복합성을 단순화 할 수 있는 효과적인 방법
6.3 동적 모델과 정적 모델
•
동적 모델
◦
실제로 객체가 살아 움직이는 동안 상태가 어떻게 변하고 행동하는지를 포착하는 것
◦
스냅 샷 (객체 다이어그램)
◦
UML
•
정적 모델
◦
모든 상태와 모든 행동을 시간에 독립적으로 표현하는 것
◦
동적으로 변하는 객체의 상태가 아니라 객체가 속한 타입의 정적인 모습을 표현
◦
타입 모델
•
객체 지향 설계 및 구현을 위해서는 객체 관점의 동적 모델과 객체를 추상화한 타입 관점의 정적 모델을 적절히 혼용 해야 함.
6.4 클래스
•
객체 지향 프로그래밍에서 타입을 구현 하는 가장 보편적인 방법
•
클래스 ≠ 타입
•
타입 ← 객체를 분류하기 위한 개념. 클래스는 타입을 구현할 수 있는 구현 매커니즘 중 하나
객체를 분류하는 기준은 타입
타입을 나누는 기준은 객체가 수행하는 행동
타입을 구현하는 방법 중 하나가 클래스
객체지향에서 중요한 것은 동적으로 변하는 객체의 상태와 상태를 변경하는 행위이다.