들어가기 전에
이제 다양한 함수의 종류와 선언, 사용 방법에 대해 살펴볼 시간입니다. 이 때도 언제든 람다식이 이용될 수 있으므로 다양한 모습의 함수에 익숙해져야 합니다. 그럼 시작해봅시다.
핵심 키워드
- 익명 함수(anonymous functions)
- 인라인 함수
- 비지역 반환(non-local return)
- inline
학습하기
들어가기 전에
이제 다양한 함수의 종류와 선언, 사용 방법에 대해 살펴볼 시간입니다. 이 때도 언제든 람다식이 이용될 수 있으므로 다양한 모습의 함수에 익숙해져야 합니다. 그럼 시작해봅시다.
핵심 키워드
학습하기
익명 함수
익명 함수(anonymous functions)란 일반 함수이지만 이름이 없는 것입니다. 물론 람다식 함수도 이름 없이 구성할 수 있지만 일반 함수의 이름을 생략하고 사용하는 경우도 있습니다.
fun(x: Int, y: Int): Int = x + y // 함수 이름이 생략된 익명 함수
람다식 함수에서는 return이나 break, continue처럼 제어문을 사용하기 어렵기 때문에 함수 본문에 조건식에 따라 함수를 중단하고 반환해야 하는 경우에 일반 익명 함수로 표현할 필요가 있습니다.
인라인 함수
인라인(inline) 함수는 이 함수가 호출되는 곳에 내용을 모두 복사해 넣어 함수의 분기 없이 처리되기 때문에 코드의 성능을 높일 수 있습니다. 인라인 함수는 코드가 복사되어 들어가기 때문에 대개 내용은 짧게 작성합니다. 인라인 함수는 람다식 매개변수를 가지고 있는 함수 형태를 권장합니다.
fun main() {
// 인라인 함수 shortFunc의 내용이 복사되어 들어감
shortFunc(3) { println("First call: $it") }
shortFunc(5) { println("Second call: $it") }
}
inline fun shortFunc(a: Int, out: (Int) -> Unit) {
println("Before calling out()")
out(a)
println("After calling out()")
}
참고자료
http://www.yes24.com
생각해보세요.
이름이 없는 함수에 대한 개념이 자주 등장하고 있지요? 이름이 없으면 잠시 사용한다는 개념으로 이해하면 좋습니다. 인간은 이름을 짓기 좋아합니다. 발견한 모든 생물에 이름을 지어주고 있기 때문이죠. 이름이 없다면 일어날 수 있는 일을 생각해 볼까요?
comment
비공개 글입니다.
(a, b) { c }
형태를 대체 왜 쓸까...... 했더니.
(a, b) {
c
}
형태로 바꾸고 싶어서 그랬던 거군요.
이름이 없다면 재사용성이 줄어들 것입니다.
사람이나 물건, 동식물도 마찬가지로 이름이 없다면 특정 대상을 지칭하기 어렵고 다른 사람에게 설명하기 어려울 것입니다.
이름 없는 함수들이 많아지면 특정함수를 사용하기 어려워 질 수 있다.
이름이 없으면 코딩이 길어졌을 때 특정 함수를 다시 찾기가 힘들 것 같습니다