추상화는 사람의 인지 한계를 늘리고 인지 과부하를 줄이는데 도움을 준다.

역할과 책임을 수행하는 객체로 추상화하는 것이 바로 객체지향이다. 기능을 협력하는 공동체로 구성하도록 객체들로 나누는 과정이 바로 객체지향 패러다임이다.

기능을 구현하기 위해 필요한 객체를 식별하고 협력 가능하도록 시스템을 분해하는 방식

데이터와 프로시져를 같이 들고있는 객체라는 존재로 시스템을 분해하는 방식

→ 결국 객체지향도 추상화를 통해 복잡성을 극복하는 프로그래밍 패러다임 중 하나일 뿐이다.

전통적인 기능 분해 방법에서 시작해 객체지향 분해 방법에 이르는 역사

메인 함수로서의 시스템

처음에는 프로시저를 단위로 기능을 분해했다. 유사하게 실행되는 작업들을 하나의 장소에 모아둠으로써 로직을 재사용하고 중복을 방지하는 추상화 방법이다.

프로시저는 왜 추상화냐? → 인터페이스만 알면 해당 프로시저를 사용할 수 있기 때문이다. 따라서 프로시저는 잠재적으로 정보 은닉의 가능성을 제시하지만 프로시저만으로는 정보은닉 체계를 구축하는데 한계가 있다.

우리가 알고 있는 메인함수부터 시작하여 세부적인 하위 단계로 점점 분리해나가는 방식은 아주 체계적이고 논리적이다. 하지만 이런 하향식 기능 분해에는 문제점이 있다.

우선 설계는 코드의 배치 방법이며, 설계가 필요한 이유는 변경에 대비하기 위함이라는 것을 기억하자. 변경이 없으면 어떻게 설계하고 코드를 쓰건 신경쓰지 않아도 된다.

하향식 기능 분해의 문제점