[Effective Kotlin] : 4장 추상화 설계

0
post-thumbnail

추상화 설계

추상화는 프로그래밍 세게에서 가장 중요한 개념이다.
특히 OOP에서 세가지 주요 개념중 하나이다.

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

간단하게 말하면 복잡성을 숨기기 위해 사용되는 단순한 형식을 의미한다.

추상화는 여러가지가 나올수있다.

추상화를 하려면 무엇을 감추고 무엇을 노출해야 하는지 결정해야한다.

프로그래밍에서는 추상화

추상화를 설계한다는것은 단순하게 모듈 또는 라이브러리로 부리한다는 의미가 아니다.

함수를 정의할때 함수 시그니처 뒤에 숨기는것을 추상화라고 한다.

뭔 의미인지 자세히 알아보자.

maxOf 가 존재한다.

fun maxOf(a: Int, b:Int) = if(a > b) a else b

함수를 정의하지않아도 필요할때마다 사용하면 위의 함수를 사용하지 않아도 된다.

하지만 너무 기존적인 수준의 연산이 표면적으로 드러나 있다.

추상화라는 것은 추상적인것을 표현하는 능력이다.

자바 8까지 리스트 매핑을 쉽게 표현하는 기능이 없어서 다음과 같은 코드를 사용했다.

List<String> names = new ArrayList<>();
 for(User user : users){
  names.add(user.getName());
 }

코틀린은 간단한 함수를 사용해, 이를 표현할 수 있다.

val names = users.map {it.name}

Java 코드 보다는 기본적인 수준의 연산이 감춰져 있다.

이처럼 함수, 델리게이트, 클래스 등을 이용하여 추상화를 할 수 있다.

추상화와 자동차

자동차는 굉장히 잘만들어진 인터페이스이다.

왜냐하면 우리가 운전할때 핸들만 밟으면 앞으로 나아가기 때문이다.

그이외의 엔진이 어떻게 작동하고, 서스펜션이 어떻게 동작하는지 알 필요가 없다.

만약 우리가 운전할때, 서스펜션, 알터네이터, 엔진을 실시간으로 이해하고 조정해야한다면 운전이 매우 힘들것이다.

하지만 우리는 핸들과 페달을 사용하는법만 알면 된다.

  • 핸들은 왼쪽과 오른쪽 방향전환에 대한 추상화를 해준다.
  • 변속기는 감속에 대한 추상화를 해준다.
  • 가속 페달은 가속에 대한 추상화를 해준다.
  • 브레이크는 감속에 대한 추상화를 해준다.

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

또한, 운전에 영향을 주지만 않는다면 무엇을 해도 괜찮다.

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

  • 복장성을 숨긴다.
  • 코드를 체계화 시킨다.
  • 만드는 사람에게 변화의 자유를 준다.

첫번째에서 3장에서 공통로직과 알고리즘을 표현하기위해 함수, 클래스, 델리게이트를 추출하는것이 중요하다고 다뤘으며, 두번째는 아이템 26에서 다루고있고 , 세번째는 아이템 27에서 살펴볼것이다.

이번장은 추상화를 만들고 사용하는 방법에 대해 정리할것이다.


링크

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글