함수 내부의 추상화 레벨을 통일하라
버튼 하나만 누르면 커피를 만들 수 있는 커피 머신을 나타내는 CoffeeMachine
클래스를 만든다고 하자.
//Before
class CoffeeMachine {
fun makeCoffee() {
// 수백 개의 변수 선언
// 복잡한 로직 처리
// 낮은 수준의 최적화 진행
}
}
위 코드처럼 모든 것을 이 레벨에서 하다보면 코드를 이해하고 수정하는데에 어려울 것이다.
class CoffeeMachine {
fun makeCoffee() {
boilWater()
brewCoffee()
pourCoffee()
pourMilk()
}
private fun boilWater() {
//
}
private fun brewCoffee() {
//
}
private fun pourCoffee() {
//
}
private fun pourMilk() {
//
}
}
따라서 낮은 레벨 (boilWater, brewCoffee ...)로 분리해 가독성을 향상시킬 수 있고 테스트도 쉬워진다. 함수를 작고, 최소한의 책임만 가지도록 추상화하도록 하자.
추상화 계층이라는 개념은 함수보다 높은 레벨에서 적용할 수 있다.
모듈을 분리하면 계층 고유의 요소를 숨길 수 있다.
별도의 추상화 계층을 만든다면 다음과 같은 이점이 존재한다.
추상화 레벨은 구체적인 동작, 프로세서, 입출력과 가까울수록 낮은 레벨이다.