본문 바로가기

CS/CS Book

[오브젝트] ch07 객체분해

💡이 글은 조영호, 『오브젝트: 코드로 이해하는 객체지향 설계』, 위키북스(2019) 책을 읽고 작성한 글입니다.

 

저자의 글 전개 방식에 다시 한번 감탄하며 읽을 수 있었다.

단기 기억장기 기억을 이야기하며 사람의 단기 기억은 한번에 5~9개 정도만 기억 가능하고 단기 기억에 넣을 수 있는 정보량을 넘어서면 인지 과부하가 되어 문제 해결 능력이 급격히 떨어짐을 알려주며 시작한다.

인지 과부하를 방지하는 좋은 방법으로 단기 기억에 보관할 정보의 양을 조정하는 것이라 하며 불필요한 정보를 제거하고 문제 해결에 필요한 핵심만 남기는 작업추상화라 한다.

 

일반적인 추상화 방법으로 한 번에 다루어야 하는 문제 크기를 작게 줄이는 것, 이렇게 큰 문제를 해결 가능한 문제로 나누는 작업을 분해(decompostion)라고 한다.

src: https://www.researchgate.net/figure/Diagram-of-divide-tasks-and-conquer_fig4_230584852

 

여기서 단기 기억에 저장 가능한 갯수가 개별 항목이 아니라 하나의 단위로 취급될 수 있다 하며 전화번호 예시를 든다.

전화번호 8자리가 아니라 전화번호 형식을 개념적인 청크(하나의 묶음 단위)로 묶으면 전화번호 8개를 기억할 수 있도록 인지능력을 향상 시킬 수 있다한다.

 

여기서 왜 저자분이 단기 기억을 이야기하였고 인지과부하와 추상화를 언급 했는지 조금이나마 추정해볼 수 있었다.

프로그램은 여러 함수로 이루어지고 함수들은 그 내부에 또 다른 함수와 코드들의 조합으로 이루어진다.

 

프로그램이라는 하나의 큰 문제를 함수들이랑 작은 청크로 나눌 수 있고 이렇게 가장 작은 청크로 만들며(분해) 문제를 해결함 수 있음과 문제를 핵심으로 추리는(추상화) 것을 알려주었다.

 

모든 프로그래밍 패러다임추상화분해의 관점에서 설명할 수 있음과 현대적 프로그래밍 언어를 특징 짓는 중요한 두 가지 추상화 매커니즘은 프로시저 추상화, 데이터 추상화가 있음을 언급한다.

전통적으로 분해하는 것을 하향식으로 진행하였다 하며 최상위 기능을 정의하고, 이 최상위 기능을 좀 더 작은 단계의 하위 기능으로 분해해 나가는 방법을 소개해준다.

 

시스템이 하나의 메인에서만 나아가지 않기에 하향식으로 구성하게 되면 기능 추가나 수정할 때마다 기존 코드를 건드려야하고 기존 코드를 건드리는 것은 에러가 발생할 확률이 올라감을 이야기 해준다.

 

이번 챕터에서는 위에서 이야기한 분해, 추상화를 기반으로 간단한 급여 관리 시스템 코드 예시를 보여주고 개념들을 적용하며 어떤 차이가 있는지 보여준다.

 

이해하기 좋은 글 전개 방식이 가장 기억에 남는다.

요즘 이해하려면 꽤 많은 시간이 들어가고 그러다보니 부담이 되어 잘 읽지 않게 되는 측면이 있어 세부사항을 조금 빠르게 읽었다.

핑계이지만 좋게 말하면 오브젝트 책 이해하기를 분해 했다고 할 수 있을거 같다. 우선은 흐름을 알기 위해 1회독을 하고 예제로 나오는 프로그램들은 테스터 구현과 절차지향적으로 생각나는대로 동작하게 만들고 책에 나오는 대로 OOP스럽게 리팩터링하며 익히는 식으로 OOP라는 개념 익히기를 분할정복 해봐야겠다.