지하철 노선도
- 초기의 지하철 노선도는 이동이라는 본래의 목적과는 무관한 사실적인 지형 정보를 혼합함으로써 역 사이의 연결성이라는 중요한 정보를 파악하기 힘들게 만들었다.
- 중요한 것 : 역과 역 사이의 연결 관계
추상화를 통한 복잡성 극복
- 추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정
- 현실의 복잡성을 극복
- 추상화
- 어떤 양상, 세부사항, 구조를 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법
- 복잡한 것을 이해하기 쉬운 수준으로 단순화 하는것
-
- 구체적인 사물들 간의 공통점을 취하고 차이점을 버림
-
- 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함
객체지향과 추상화
- 그룹으로 나누어 단순화하기
- 여러 객체가 갖는 공통점을 기준으로 그룹화 하여 단순화
- 개념
concept
(개념) : 공통점을 기반으로 객체들을 묶기 위한 그릇
- 개념을 통해 여러 그룹으로 분류(classification)
- 객체를 분류할 수 있는 체
- 객체가 그룹의 일원이 될때, 이 객체를 그 개념의 인스턴스(instance) 라고 한다.
최대한 직관적으로 분류
타입
- 타입(type) : 공통점을 기반으로 객체들을 묶기 위한 틀 = 개념
객체와 타입
- 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동
- 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
- 행동을 수행할 수 있다면, 내부의 상태는 어떤 방식이든 무방
행동이 우선이다
- 객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 그 객체들은 동일한 타입
- → golang interface (struct X)
- → OOP golang 은 객체의 행동이 중요하기 때문에, struct 가 아닌 interface 에 집중해야한다.
- 동일한 행동 = 동일한 책임 = 동일한 메시지를 수신 → 처리 방식은 서로 다를 수 있다 →
다형성
- 책임주도설계는 데이터주도설계의 단점을 개선하기 위해 고안
타입의 계층
- 타입사이에는 일반화/특수화 관계가 존재
- 일반적 = 더 포괄적 / 특수적 = 더 세부적
일반화/특수화를 결정하는 것도 행동
- 특수한 타입은 일반적인 타입의 행동을 모두 포함하고, 더 많은 행동을 추가로 수행
- 슈퍼타입(super type) : 더 일반적인 타입
- 서브타입(sub type): 더 특수한 타입
- 슈퍼타입은 서브타입에게
상속
된다.
정적 모델
- 타입을 사용하면
- 동적으로 변하는 객체의 상태를 정적인 관점에서 표현할 수 있다.
- 객체의 동적인 특성을 추상화할 수 있다.
- 복잡성을 단순화
- 클래스 : 타입을 구현하는 방법 / 절대 타입 ≠ 클래스 , 구현하는 여러 매커니즘중 하나