How to deal with complexity

Jeff·2021년 9월 12일
0
post-thumbnail

공학에서 복잡한 것(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를 사용할 수 있는 것은, 그 아래 수많은 추상화 레벨들의 연구의 지원이 있기 때문이다.

Interface

우리가 컴퓨터를 사용할 때, 컴퓨터의 구현(implementation)할 줄 몰라도 컴퓨터의 Interface만 알면 사용할 수 있다. Interface란 일종의 product의 사용설명서이다.

Computer Science의 Three Major Interfaces

1. ISA(Instruction Set Architecture)

Hardware에서 Software에게 제공하는 Interface.

2. HLL(High Level Language)

각 언어(C, Java, ...) 컴파일러가 개발자들에게 제공하는 Interface

3. API(Application Programming Interface)

OS(Kernel)가 Machine을 사용할 수 있는 API를 제공한다. 유틸리티 프로그램을 제작시 위 API를 통해 Machine의 CPU, Memory, I/O를 사용할 수 있다.

실전 - 프로그램 개발에서의 abstraction

  • React의 Component
  • npm module
  • 정확한 변수, 함수 네이밍 (내부 구현을 들어보지 않아도 동작을 파악할 수 있는)
profile
Fast is better than good

0개의 댓글