공학에서 복잡한 것(Complexity)들을 다루는 방법은 추상화(Abstraction)이다.
AND, OR, NOT Gate의 상위, 하위 추상화 레벨을 생각해보자.
- (C, C++, Java, ...)High Level Language
- Machine instruction level
- (반가산기, 전가산기, ..) Funtional level
- (AND, OR, NOT) Gate level
- Transistor level
- Semi-Conductor Physics level
- 원자물리학(Atomic Physics) level
우리가 Java같은 HLL를 사용할 수 있는 것은, 그 아래 수많은 추상화 레벨들의 연구의 지원이 있기 때문이다.
우리가 컴퓨터를 사용할 때, 컴퓨터의 구현(implementation)할 줄 몰라도 컴퓨터의 Interface만 알면 사용할 수 있다. Interface란 일종의 product의 사용설명서이다.
Hardware에서 Software에게 제공하는 Interface.
각 언어(C, Java, ...) 컴파일러가 개발자들에게 제공하는 Interface
OS(Kernel)가 Machine을 사용할 수 있는 API를 제공한다. 유틸리티 프로그램을 제작시 위 API를 통해 Machine의 CPU, Memory, I/O를 사용할 수 있다.