728x90
- 추상화 레벨
- 높은 레벨로 갈수록 물리 장치로부터 점점 멀어집니다.
- 높은 레벨일 수록 프로세서로부터 멀어진다고 표현함
- 높은 레벨일수룍 단숨함을 얻지만, 제어력을 잃습니다.
- ex) C 언어는 메모리 관리를 직접 할 수 있지만, 자바는 가비지 컬렉터가 자동으로 메모리를 관리해 줍니다.(따라서 메모리 사용을 최적화하는 것이 힘듭니다.)
- 코드도 추상화를 계층처럼 만들어서 사용할 수 있습니다. 이를 위한 기본적인 도구가 "함수"이다.
- 함수도 높은 레벨과 낮은 레벨을 구분해서 사용해야 한다는 원칙이 있다.
- 이를 추상화 레벨 통일(Single Level of Abstraction(SLA))원칙이라 부른다.
//추상화 레벨이 통일 되지 않은 케이스
class CoffeeMachine {
fun makeCoffee() {
// 수백 개의 변수를 선언
// 복잡한 로직을 처리
// 낮은 수준의 최적화도 여기에서 처리
}
}
//추상화 레벨이 통일된 케이스
class CoffeeMachine {
// 높은 레벨
fun makeCoffee() {
boilWater()
brewCoffee()
pourCoffee()
pourMilk()
}
// 낮은 레벨
private fun boilWater() { // ... }
private fun brewCoffee() { // ... }
private fun pourCoffee() { // ... }
private fun pourMilk() { // ... }
}
- 함수는 간단해야 함
- 함수는 작아야 하며, 최소한의 책임만을 가져야 한다. -> 즉 하나의 일만 처리하자
- 어떤 함수가 다른 함수보다 좀 복잡하다면, 일부 부분을 추출해서 추상화 하는 것이 좋다.
- 고수준 추상화: 함수가 무엇을 하는지를 설명하는 코드. 예를 들어, 데이터베이스에서 사용자 정보를 가져오는 함수라면 "사용자 정보를 가져온다"와 같은 고수준의 설명이 되어야 한다.
- 저수준 추상화: 함수가 어떻게 동작하는지를 설명하는 코드. 예를 들어, SQL 쿼리를 작성하고 실행하는 구체적인 구현 방식이다.
- 추상화 레벨을 통일하면 코드를 읽고 이해하기 쉬워지며, 함수의 역할과 목적이 명확해진다. 또한, 코드의 재사용성과 유지보수성도 향상된다.
728x90
'공부 > 이펙티브코틀린' 카테고리의 다른 글
아이템 28 - API 안정성을 확인하 (0) | 2024.06.23 |
---|---|
아이템 27 - 변화로부터 코드를 보호하려면 추상화를 사용하라 (0) | 2024.06.21 |
아이템 24 - 제네릭 타입과 variance 한정자를 활용하라 (1) | 2024.06.13 |
아이템 23 - 타입 파라미터의 섀도잉을 피하라 (0) | 2024.06.13 |
아이템 22 - 일반적인 알고리즘을 구현할 때 제네릭을 사용하라 (0) | 2024.06.13 |
댓글