728x90
반응형
계층이 잘 분리되면 좋은점?
- 어떤 계층에서 작업할 때 해당 계층만 생각하면 된다는 점. 즉, 전체를 이해할 필요가 없어지는 것
- 어셈블리 언어, JVM 바이트 코드가 무엇인지 몰라도 프로그래밍할 수 있음
추상화 레벨
- 높은 레벨로 갈수록 프로세서(물리 장치)로부터 멀어짐
- 높은 레벨일수록 걱정해야 하는 세부적인 내용들이 적어지지만(단순함을 얻는다.), 제어력을 읽어버림
- c언어는 메모리 관리를 직접 할 수 있으나, 자바는 가비지 컬렉터가 자동으로 관리 해줌
- 메모리 사용을 최적화하는 것이 힘듬
- 높은 레벨(고수준)일 수록 비즈니스 핵심 로직에 가까움
추상화 레벨 통일
- 코드도 추상화를 계층처럼 만들어 사용할 수 있는데, 이를 위한 기본적인 도구가 함수
class CoffeeMachine {
fun makeCoffee() {
// 수백개의 변수 선언
// 복잡한 로직 처리
}
}
- 위와 같은 함수는 읽으면서 세부적인 내용을 하나하나 신경써야 하므로, 읽고 이해하는 것이 거의 불가능에 가까움
class CoffeeMachine {
fun makeCoffee() {
boilWater()
brewCoffee()
pourCoffee()
pourMilk()
}
}
- 함수를 계층처럼 나누어서 사용하는 것이 필요
- makeCoffee함수는 읽고 이해하기 쉬우며, 누군가가 낮은 레벨(boilWater, brewCoffee 등)을 이해해야 한다면, 해당 부분의 코드만 살펴보면 됨
- 함수는 작아야 하며, 최소한의 책임만을 가져야 한다.
정리
- 함수, 클래스, 모듈 등의 다양한 방식을 통해서 추상화를 분리
- 이 때 각각의 레이어가 너무 커지는 것은 좋지 않으며 작고 최소한의 책임만 갖는 함수가 이해하기 쉬움
- 낮은 추상화 계층에서는 높은 계층에서 사용하는 요소(API)를 만듬
728x90
반응형
'프로그래밍 노트 > Effective 시리즈' 카테고리의 다른 글
[Effective Kotlin. 16] 프로퍼티는 동작이 아니라 상태를 나타내야 한다. (1) | 2023.11.01 |
---|---|
[Effective Kotlin. 11] 가독성을 목표로 설계하라 (1) | 2023.11.01 |
[Effective Kotlin. 36] 상속보다는 컴포지션을 사용하라 (0) | 2023.10.17 |
생성자 대신 정적 팩토리 메서드를 고려해보자. (0) | 2020.01.18 |
자원을 직접 명시하지 말고 의존 객체 주입을 사용하자 (0) | 2020.01.18 |