반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- node
- 스나이퍼팩토리
- php
- 변수
- ios
- php개발
- android
- 그림으로 배우는 서버구조
- Eclipse
- 코루틴
- kotlin2.0
- java
- 이클립스
- 코틀린
- 설치
- Flutter
- Flow
- express
- 조건문
- 스터디
- 서버
- script
- 플러터
- SwiftUI
- jquery
- node.js
- 정보처리기사
- kotlininaction
- Kotlin
- php변수
Archives
- Today
- Total
mygomii
[Kotlin] 3.6 코드 깔끔하게 다듬기: 로컬 함수와 확장 본문
반응형
- 많은 개발자가 좋은 코드의 중요한 특징 중 하나가 중복이 없는 것이라 믿음 →ㅇㅈㅇㅈ
- → 이런 원칙에 대해 반복하지 말라(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 처럼 내부에 로컬 함수로 넣을 수 있음
- 하지만 내포된 함수의 깊이가 깊어지면 코드를 읽기가 상당히 어려워질 수 있으므로 일반적으로 한 단계만 함수를 내포시키라고 권장함
반응형
'Kotlin' 카테고리의 다른 글
[Kotlin] 4.1 클래스 계층 정의 (1) | 2025.04.02 |
---|---|
[Kotlin] 3.5 문자열과 정규식 다루기 (0) | 2025.04.01 |
[Kotlin] 3.4 컬렉션 처리: 가변 길이 인자, 중위 함수 호출, 라이브러리 지원 (0) | 2025.03.26 |
[Kotlin] 3.3 메서드를 다른 클래스에 추가: 확장 함수와 확장 프로퍼티 (0) | 2025.03.24 |
[Kotlin] 3.2 함수를 호출하기 쉽게 만들기 (0) | 2025.03.20 |