Kotlin

[Kotlin] 3.6 코드 깔끔하게 다듬기: 로컬 함수와 확장

mygomii 2025. 4. 1. 09:00
반응형
  • 많은 개발자가 좋은 코드의 중요한 특징 중 하나가 중복이 없는 것이라 믿음 →ㅇㅈㅇㅈ
  • → 이런 원칙에 대해 반복하지 말라(DRY: Don’t Repeat Yourself) 라는 이름도 있음
  • 자바에서는 쉽지않지만 코틀린에는 더 깔끔한 해법이 있음
  • 코틀린에서는 함수에서 추출한 함수를 원래의 함수 내부에 내포 시킬 수 있음
  • 코드 중복을 보여주는 예제
class Student(val name: String, val korean: Int, val english: Int, val math: Int) {
    fun koreanAverage(): Double {
        return korean / 100.0 * 100
    }

    fun englishAverage(): Double {
        return english / 100.0 * 100
    }

    fun mathAverage(): Double {
        return math / 100.0 * 100
    }
}
  • 로컬 함수를 사용해 코드 중복 줄이기
class Student(val name: String, val korean: Int, val english: Int, val math: Int) {
    
    // 공통 로직을 메서드로 추출
    private fun calculateAverage(score: Int): Double {
        return score / 100.0 * 100
    }

    fun koreanAverage(): Double {
        return calculateAverage(korean)
    }

    fun englishAverage(): Double {
        return calculateAverage(english)
    }

    fun mathAverage(): Double {
        return calculateAverage(math)
    }
}
  • 로컬 함수를 확장하기
class Calculator {
    fun calculateArea(width: Int, height: Int, isRectangle: Boolean): Int {

        fun rectangleArea() = width * height
        fun triangleArea() = width * height / 2

        return if (isRectangle) rectangleArea() else triangleArea()
    }
}

fun main() {
    val calculator = Calculator()

    println("직사각형 면적: ${calculator.calculateArea(10, 5, true)}")
    println("삼각형 면적: ${calculator.calculateArea(10, 5, false)}")
}
  • rectangleArea , triangleArea 처럼 내부에 로컬 함수로 넣을 수 있음
  • 하지만 내포된 함수의 깊이가 깊어지면 코드를 읽기가 상당히 어려워질 수 있으므로 일반적으로 한 단계만 함수를 내포시키라고 권장함
반응형