반응형
1. 확장함수
코틀린은 자바와 100% 호환을 목표로 하고 있다. 기존 자바 코드 위에 자연스럽게 코틀린 코드를 추가하려는 고민이 동반된다.
그래서 어떤 클래스 안에 있는 메서드처럼 호출할 수 있지만, 함수는 밖에 만들 수 있도록 하는 개념이 나온다.
fun main() {
val str = "abc"
print(str.lastChar())
}
fun String.lastChar(): Char {
return this[this.length-1]
}
String 클래스를 확장하는 코드이다. 이 함수 블록 내부에서는 this를 이용해 실제 클래스 안의 값에 접근한다.
확장함수가 캡슐화를 위협할 수 있다고 생각할 수 있지만 확장함수는 클래스의 private, protected 멤버자체를 가져올 수 없다.
시그니처가 동일할 수 있다. 기능 추가가 아닌 자바 코드에서 코틀린 코드로 변경하되 기존 함수는 남기는 경우 함수의 시그니처가 동일할 수 있는데, 이러한 경우 기존 작성된 클래스멤버 함수가 우선적으로 호출된다.
이는 추후 확장함수와 동일한 시그니처를 가진 멤버함수가 추가되는 경우 오류가 발생할 수 있기에 조심해야 하는 부분이다.
2. infix 함수
중위함수는 함수를 호출하는 새로운 방법이다.
downTo, step도 함수이다. 이는 변수.함수이름(arg) 대신 변수 함수이름 arg로 호출하도록 해주는 것을 중위함수라고 한다.
fun main() {
var num = 3
print(num add 3);
}
infix fun Int.add(other: Int): Int{
return this + other
}
3. inline 함수
이는 함수가 호출되는 대신, 함수를 호출한 지점에 함수 본문을 그대로 복사하는 것이다.
이는 함수를 파라미터로 전달할 때 오버헤드를 줄일 수 있어 사용하지만 이는 성능 측정과 함께 사용되어야 한다.
4. 지역함수
이는 함수안에 함수를 선언할 수 있는 것이다.
fun createPerson(firstName: String, lastName: String): Person {
fun validateName(name: String, fieldName: String) {
if (name.isEmpty()) {
throw IllegalArgumentException("name is empty : $fieldName")
}
}
validateName(firstName, "firstName")
validateName(lastName, "lastName")
return Person(firstName, lastName, 10)
}
반응형
'Kotlin' 카테고리의 다른 글
Kotlin 테스트 작성을 위한 빌드 업 (0) | 2023.01.18 |
---|---|
Tip (0) | 2023.01.15 |
중첩 클래스, 다양한 클래스 (0) | 2023.01.15 |
Object 키워드 (0) | 2023.01.12 |
접근 제어 (0) | 2023.01.02 |
댓글