# TDD강의, 테스트 주도 개발 기초 Chapter #3
###### tags: `냥하`, `강의`
## 테스트 주도 개발의 깊은 곳
### 1. 인터페이스와 구현
- 추상화: 목적에 따라 대상이 가지고 있는 것 중 일부만을 투영하는 것.
- 협력과 계약
- 인터페이스: 어떻게 협업할지에 대한 계약, 클라이언트 코드에게 반드시 필요한 정보, '무엇'
- 정보 숨김
- 효과적인 모듈화
- 정보를 숨김으로서 이해를 돕는다 :: 대부분의 시스템정보는 대두분의 프로그래머에게 숨겨지는 것이 도움된다.
<br/><br/>
### 2. 환경변화와 적응력
- Alan Kay: 지연된 바인딩, 다형성(일반성)
- **개방-폐쇄 원칙(OCP)**: 소프트웨어 엔터디(클래스, 모듈, 함수 등)는 확장에 열리고 수정에 닫혀야 한다.
- 확장이 가능하다는 것은 모듈이 열려있음을 의미
- 다른모듈에 사용될때는 닫힘원칙
- 다형적 개방-폐쇄 원칙
- <img width="623" alt="Screen Shot 2022-04-17 at 1 10 52 PM" src="https://user-images.githubusercontent.com/48500209/163700045-9ab018b3-5293-4785-96fe-f3387225c711.png">
- 추상화에 의존
<br/><br/>
### 3. 입력과 출력
- 입력 - 논리 - 출력
- 직접 입력, 직접 출력
- 간접 입력, 간접 출력