목차

26. 함수 내부의 추상화 레벨을 통일하라


추상화

추상화 레벨을 통일하라고 하는데 추상화가 무엇인지에 대해 간단하게 짚고 넘어가자.

우리는 커피를 마시고 싶으면 카페로가서 종업원에게 커피를 주문하고 돈을 지불하고, 일정 시간을 기다려서 커피를 받는다. 그게 끝이다.

그럼 여기서 커피를 주문하고 받기까지 우리는 다른 어떤걸 신경 쓸 필요가 없다. 하지만, 내부적으로 커피를 만들기 위해 원두를 꺼내서 적절한 굵기로 갈고 탬퍼링을 하고 머신에 꼽아넣고 샷을 내리고, 컵을 옮겨담아서 물 혹은 우유등을 추가하고 얼음을 넣는 과정까지 상당히 많은 과정들이 있다.

하지만, 사용자 입장에서 이런 과정들을 알아야 할까? 사용자는 그저 커피를 주문했으면 받아서 마시는데만 집중하면 된다.

그리고 이처럼 부가적인 상세 내용들을 신경쓰지 않고 how 보다는 what에 집중하는것이 추상화다.

추상화 레벨

옆의 표를 보면 아래로 내려갈수록 물리 계층과 가까워진다.

프로그래밍에선 물리 계층 즉 실체와 가까워질수록 추상화 레벨이 낮아진다고 표현한다. 이런 실체와 가까워지는 과정(추상화 레벨 다운)이 진행 될 수록 우리는 많은 것을 직접 제어해야하기에 더 세밀한 제어가 가능하지만, 반대로 말하면 너무 많은 걸 매번 모두 제어해줘야 하기 때문에 비용도 크고 문제가 발생할 여지도 커진다.

반대로 실체로부터 멀어질수록(추상화 레벨 업) 우리는 그런 세밀한 제어를 할 수는 없지만 대신 단순하게 목표에 집중할 수 있게 된다.

애플리케이션
프로그래밍 언어
어셈블러
하드웨어
물리장치

대표적으로 자바는 메모리 관리를 가비지 컬렉터(GC)가 대신 해주기 때문에 개발자가 메모리 관리까지 신경을 쓰지 않고 도메인에만 집중하면 되지만, 메모리를 직접 최적화 하기가 까다롭다.

반면, C 언어와 같은 로우 언어를 사용할 경우 메모리 관리를 직접 할 수 있기에 최적화를 하기 용이하지만, 반대로 직접 가비지 컬렉터가 하는 관리를 해줘야해서 까다롭다.

추상화 레벨 통일