728x90
반응형
1. inline 함수
inline 함수는 실행 흐름을 점프하지 않고 함수 호출문을 함수의 몸체로 대체하는 함수이다.
함수를 호출하면 함수 속으로 실행 흐름이 점프하고, 함수가 끝나면 함수를 호출했던 지점으로 다시 점프하는데 이때 발생하는 실행 흐름의 이동은 프로그램의 성능을 미세하게 저해한다. inline 함수를 사용하면 성능을 조금이나마 개선할 수 있다.
inline 함수는 재귀 호출이 불가능하며(몸체가 무한으로 늘어날 수 있음), 함수 속의 문장을 재활용하지 않기 때문에 문장이 많은 함수를 inline 함수로 바꾸면 프로그램의 크기가 기하급수적으로 늘어난다. 따라서 문장이 적고 빈번히 호출되는 함수만 inline 함수로 만들 것을 권장한다.
inline fun hello() {
println("Hello")
println("Kotlin")
}
fun main() {
hello()
hello()
hello()
// 컴파일 되는 순간 아래와 같이 됨
/*
println("Hello")
println("Kotlin")
println("Hello")
println("Kotlin")
println("Hello")
println("Kotlin")
*/
}
2. const
val 변수 앞에 const 키워드를 붙이면 변수에 접근하는 코드를 변수에 저장된 값으로 대체시킨다.
const가 붙은 변수에는 리터럴로 이루어진 표현식만 저장이 가능하며, 코틀린 문법 중에 리터럴만 와야하는 자리가 있는데 해당하는 곳에 사용하면 좋다.
const 키워드는 전역변수, 오브젝트의 프로퍼티 등에 붙일 수 있다.(커스텀 Getter를 쓰면 안됨)
프로그램 어디서나 바로 접근할 수 있는 변수에 붙임
const val hello = "Hello" + "World!"
object Foo {
const val bar = "bar"
}
fun main() {
println(hello)
println(Foo.bar)
println(hello)
println(Foo.bar)
}
3. lateinit
lateinit 키워드를 사용하면 사용자 정의 클래스를 초기화할 때 바로 초기화하지 않아도 된다.
lateinit 키워드는 var 프로퍼티에만 붙일 수 있다.
lateinit 프로퍼티가 초기화되었는지 여부를 확인하려면 다음과 같이 한다.
if(rect::pt.isInitialized) {
}
아래는 lateinit을 사용한 예제이다.
// 점을 표현하는 클래스
class Point(val x: Int, val y: Int)
// 사각형을 표현하는 클래스
class Rect {
// lateinit 키워드 붙은 프로퍼티는 클래스 안에서 바로 초기화하지 않아도 된다.
lateinit var pt: Point
lateinit var pt2: Point
val width: Int get() = pt2.x - pt.x
val height: Int get() = pt2.y - pt.y
val area get() = width * height
}
fun main() {
val rect = Rect()
rect.pt = Point(3, 3)
rect.pt2 = Point(6, 5)
println("너비: ${rect.width}")
println("높이: ${rect.height}")
println("넓이: ${rect.area}")
}
728x90
반응형
'TIL > Kotlin' 카테고리의 다른 글
[TIL/Kotlin] 코틀린 고급문법_추상 클래스, 인터페이스, 다이아몬드문제(상속구현문제) (0) | 2023.05.17 |
---|---|
[TIL/Kotlin] 코틀린 고급문법_Nullable 리시버, 동반자 객체의 확장 함수, 확장 함수의 리시버 타입이 상속 관계에 있을 때 참조 변수를 따른다 (0) | 2023.05.17 |
[TIL/Kotlin] 코틀린 고급문법_객체 선언과 동반자 객체 (0) | 2023.05.17 |
[TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티 (0) | 2023.05.14 |
[TIL/Kotlin] 코틀린 중급문법_스마트 캐스팅, is 연산자, as 연산자와 다운캐스팅 (0) | 2023.05.14 |