How to deal with complexity
공학에서 복잡한 것(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
- 정확한 변수, 함수 네이밍 (내부 구현을 들어보지 않아도 동작을 파악할 수 있는)
Author And Source
이 문제에 관하여(How to deal with complexity), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeff_gan/How-to-deal-with-complexity저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)