추상화 수준

Dae-Hee·2023년 1월 17일
0
post-thumbnail

abstraction level


▪︎ 추상화 ?

  • 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것
구체적인 사물들간의 공통점을 취하고 차이점을 버리는 일반화를 사용하거나,
중요한 부분을 강조하기 위한 불필요한 세부 사항을 제거함으로써 단순하게 만드는것
불필요한 코드를 제거하고 중요한 부분을 살리는 것

  1. 음식점에 간다.

  2. 음식점에 차를 타고 간다.

  3. 음식점에 부모님의 차를 타고 간다.

3으로 갈수록 추상화 수준이 점점 낮아진다.
코드를 작성할때 1,2단계는 없고 3만 나오는 경우가 있다.
1,2을 건너뛰고 3의 코드를 우리가 본다면,

'핵심'이 무엇인지 무엇(what)을 하는지 알기 위해 코드를 보고
'추론'해서 찾아내야 한다.

구체적인 어떻게(how)를 숨기고 무엇(what)을 먼저 보게 할 수 있는
코드를 작성하는 것이 생산성에 좋다고 한다.

▪︎ 함수 추상화

클린코드의 3장(함수) 내용을 참고 했습니다.
  • 함수는 작게 쪼개서 만드는것

  • 함수는 한 가지의 일만 하는것

  • 함수 당 추상화 수준은 하나로 설정 하는것


  • 높은 추상화 수준
    getHtml()이라는 함수는 HTML을 가져오는 것은 알겠는데, 어떤 것이랑 연관되어 있는지 알 수 없기 때문에 추상화 수준이 높다.

  • 보통 추상화 수준
    const pagePathName = PathParser.render(pagepath);
    PathParser객체의 render 함수를 이용해 pagePathName을 가져올 수 있다는 정보를 유추할 수 있기 때문에 추상화 수준이 보통이라고 할 수 있습니다.

  • 낮은 추상화 수준
    .append("\n")는 바로 어떤 의미인지 유추 가능하기 때문에 추상화 수준이 낮다고 할 수 있습니다.


한 함수 내에 여러 추상화 수준을 섞으면 특정 표현이 높은 추상화 수준인지 낮은 추상화 수준인지 구분하기 어렵기 때문에 코드를 읽는것이 어려워 질 수 있다.

즉 추상화 수준을 통일 시 해야한다.
또한, 함수는 작아야하고 한 가지의 일(최소한의 책임)을 가지는 것이 좋다.

// Before
class CoffeeMachine {
  makeCoffee() {
    // 수백 개의 변수 선언
    // 복잡한 로직 처리
    // 낮은 수준의 최적화도 여기서 진행
  }
}

// After
class CoffeeMachine {
  makeCoffee() {
    boilWater();
    brewCoffee();
    pourCoffee();
    pourMilk();
  }

  boilWater() {
    // ...
  }
    
  brewCoffee() {
    // ...
  }
    
  pourCoffee() {
    // ...
  }
    
  pourMilk() {
    // ...
  }
}

Before 비해 AftermakeCoffee 동작하는 흐름을 빠르게 이해할 수 있다.
낮은 레벨을 이해해야하는 경우 해당 부분의 함수(메서드)만 보면 된다.




Reference

0개의 댓글