본문 바로가기

프로그래밍 언어/코틀린_Kotlin_더파기

Kotlin더파기_05_Function Reference_함수참조

앞 글에서 람다를 이용하여 함수를 다른 함수 인자로 전달했다.

앞 글에 이어서 여기서는 인자를 전달할 때 함수참조를 사용하는 방법을 알아본다.

 

함수 참조

 

함수참조는 일반적인 함수(fun으로 정의한 함수)를 인자로 전달한다.

 

lotteryPrizeMoney(복권 당첨금) 함수를 만든다.

 

 

runTest함수에 prizeMoney(상금)을 함수 참조 매개변수로 추가한다.

이 매개변수를 사용하여 상금을 출력하는 코드를 추가한다.

 

함수를 참조할 때는 연산자 :: 를 사용한다.

 

lotteryPrizeMoney 함수를 참조한 후 이것을 

runTest 함수의 매개변수 prizeMoney 인자로 전달한다.

 

함수타입을 반환타입으로 사용하기

 

congratulation(축하) 함수를 만들어 보자

 

이 함수는 지역 변수(포상형태, 돈)를 선언하고 람다에 포함시킨 후 반환하는 함수이다.

 

이제 이 함수를 호출하는 runTest()함수를 만들고 main함수에서 실행하면 결과가 나온다.

 

이렇게 지역변수를 람다에 포함시켜 반환하면 다른 함수(runTest)에서 실행할 수 있다.

이것이 가능한 이유는 코틀린의 람다는 closure(클로저)이기 때문이다.

closure는 close+over (뒤덮다)의 뜻이다.

클로저의 기능은 다른 함수에 자신의 매개변수와 변수를 사용할 수 있게 하는 것을 말한다.

 

위의 함수처럼 다른 함수를 인자로 받거나 반환하는 함수를 고차함수(Higher order function)이라고 한다.

 

클로저 기능의 또 다른 예를 살펴보자.

람다함수(익명함수)가 범위 밖에 정의된 변수를 참조하여 변경할 수 있다.

 

변수money가 람다 외부에 정의되어 있는데 그 변수에 2를 곱해서 저장하는 코드를 넣는다.

그리고 runTest함수에서 호출을 한번 더 하면 어떤 결과가 나오는 지 확인해 보자.

 

결론적으로 람다 표현과 함께 함수타입, it 키워드, 클로저 등의 기능을 사용하면 코드의 양이 줄어들고 유연하게 작성할 수 있다는 장점이 있다.

 

여기까지 람다와 함수참조를 알아보았다.

끝.

 

Wraven...