이 질문을 이해하려면 추상화가 무엇인지 이해해야합니다. (나는 공식적인 정의를 찾기에는 너무 게으르다. 그래서 나는 쇠약해질 것이라 확신한다. 그러나 여기에서 간다.) 추상화는 복잡한 주제 나 실체를 가지고 대부분의 세부 사항을 숨길 때이다 그 객체의 본질을 여전히 정의하는 기능을 노출시키면서
나는 그 책이 당신에게 준 예가 집이라고 믿습니다. 집을 자세히 살펴보면 보드, 못, 창문, 문으로 구성되어 있음을 알 수 있습니다. 그러나 사진 옆에 집을 그리는 만화는 여전히 집입니다. 많은 세부 사항.
소프트웨어도 마찬가지입니다. 책에서 알 수 있듯이 프로그래밍 할 때마다 소프트웨어를 레이어로 생각해야합니다. 주어진 프로그램은 쉽게 100 개 이상의 레이어를 가질 수 있습니다. 맨 아래에는 CPU에서 실행되는 어셈블리 명령어가있을 수 있습니다.이 명령어는 더 높은 수준에서 디스크 I / O 루틴을 형성하기 위해 결합 될 수 있으며, 더 높은 수준에서는 디스크 I / O로 작업 할 필요가 없습니다. Windows 기능을 사용하여 파일 열기 / 읽기 / 쓰기 / 탐색 / 닫기를 간단히 할 수 있기 때문에 O. 이들은 자신의 응용 프로그램 코드에 도달하기 전에도 모두 추상화됩니다.
코드 내에서 추상화 계층이 계속됩니다. 하위 수준의 문자열 / 네트워크 / 데이터 조작 루틴이있을 수 있습니다. 더 높은 수준에서 이러한 루틴을 사용자 관리, UI 계층, 데이터베이스 액세스를 정의하는 서브 시스템으로 결합 할 수 있습니다. 또 다른 계층은이 서브 시스템을 더 큰 엔터프라이즈 시스템의 일부로 통합하는 서버 구성 요소로 결합 할 수 있습니다.
이들 추상화 계층 각각의 핵심은 각각이 이전 계층 (들)에 의해 노출 된 세부 사항을 숨기고 다음 계층에 의해 소비 될 매우 깨끗한 인터페이스를 제시한다는 것이다. 파일을 열기 위해 개별 섹터를 작성하는 방법이나 처리 할 하드웨어 인터럽트를 몰라도됩니다. 그러나 추상화 계층 체인으로 이동하기 시작하면 Write () 함수 호출에서 하드 드라이브 컨트롤러로 전송되는 정확한 명령까지 추적 할 수 있습니다.
저자가 말한 것은 클래스 나 함수를 정의 할 때 어떤 레이어인지 생각하십시오. 서브 시스템 및 사용자 오브젝트를 관리하는 클래스가있는 경우, 동일한 클래스가 저수준 문자열 조작을 수행하거나 소켓 호출을위한 변수를 포함하지 않아야합니다. 그것은 추상화 계층을 넘어서고 하나의 클래스 / 함수가 하나의 일만하는 것입니다 (SRP-단일 책임 원칙).