ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 26장 - 함수 내부의 추상화 레벨을 통일하라
    Kotlin/Effective Kotlin 요약 2023. 3. 12. 00:01
    728x90

    추상화란?

    컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말합니다.

     

    추상화와 자동차 예시

    자동차 내부에서는 엔진, 알터네이터, 서스펜션 등의 여러 가지 요소들이 함께 자동차가 움직일 수 있게 만듭니다.

    운전을 할 때 이런 요소들을 실시간으로 이해하고 조정해야 한다면, 자동차 운전은 굉장히 힘들 수 있습니다.

     

    하지만 운전자는 자동차를 조종하는 인터페이스(핸들과 페달 등)를 사용하는 방법만 알면 됩니다.

    가솔린 자동차, 천연가스 자동차, 경유 자동차, 전기 자동차 모두 운전 방법이 대부분 같습니다.

    자동차가 내부적으로 여러 반도체와 특수한 시스템을 도입해도, 운전자는 상관없이 운전할 수 있습니다.

     

    자동차는 굉장히 잘 만들어진 인터페이스로 굉장히 쉽게 사용할 수 있습니다.

    추상화는 이처럼 내부적으로 일어나는 모든 것을 마법처럼 숨겨줍니다.

     

    마찬가지로 프로그래밍에서는 다음과 같은 목적으로 추상화를 사용합니다.

    - 복잡성을 숨기기 위해

    - 코드를 체계화하기 위해

    - 만드는 사람에게 변화의 자유를 주기 위해

     

     

    컴퓨터에서 추상화

    개발자 관점에서 가장 낮은 추상화 계층은 하드웨어입니다.

    프로세서 제어 명령은 원래 0과 1로 이루어지지만, 이를 쉽게 읽을 수 있게 일대일로 대응된 어셈블리라는 언어로 표현합니다.

    하지만 어셈블리라는 언어 또한 어렵기 때문에 C, C++ 등의 높은 레벨의 언어가 등장하게 됩니다.

     

    추상화 레벨과 제어력

    높은 레벨로 갈수록 물리 장치로부터 점점 멀어집니다.

    높은 레벨일수록 걱정해야 하는 세부적인 내용이 적습니다.

    하지만 제어력을 잃게 됩니다.

    예를 들어 C언어는 메모리를 직접 관리할 수 있지만, 자바는 GC가 자동으로 메모리를 관리합니다.

    따라서 메모리 사용을 최적화하는 것이 굉장히 힘들어집니다.

     

    추상화 레벨 통일

    코드도 추상화해서 관리할 수 있으며 이를 위한 도구가 바로 함수입니다.

    예를 들어 커피머신을 나타내는 클래스를 만들 수 있습니다.

    이때 makeCoffee라는 함수 하나로 여러 로직들을 구현하게 되면 해당 함수가 복잡해질 수 있습니다.

     

    이때 다음과 같이 계층을 나누어 사용할 수 있습니다.

    fun makeCoffee(){
    	boilWater()
    	brewCoffee()
    	pourCoffee()
    	pourMilk()
    }

    이제 makeCoffee는 읽기 쉬워지고 누군가 낮을 레벨(boilWater, brewCoffee)을 이해해야 한다면, 해당 부분의 코드만 살펴보면 됩니다.

     

    또한 함수가 작어졌기 때문에 테스트하기도 쉬워집니다.

     

    정리

    최근에 리팩토링을 수행하면서 사람이 이해하고 비즈니스 로직을 파악하기 쉽게 추상화하는 일을 진행하고 있기 때문에 크게 공감되는 챕터였습니다.

    728x90

    댓글

Designed by Tistory.