인프런 커뮤니티 질문&답변

Seongjin Lee님의 프로필 이미지
Seongjin Lee

작성한 질문수

[입문편] 안드로이드를 위한 코틀린(Kotlin) 문법

고차함수(High-order Function)란

고차함수 7:43분 관련 질문입니다.

작성

·

187

1

고차함수는 함수를 인수로 받는 함수라고 이해했어요.

그런데, 7:43정도에 나오는 highPrintTest(::printTest)

에서 고차함수는 "결과 등을 리턴하는 함수"를 인수로 가지는 함수이기에, ::printTest 이 부분은 printTest함수의 결과값이 들어가야 하지 않나요? 그런데, 지금 printTest말고는 인수를 안 태웠기 때문에, printTest(str:String)함수에는 변수의 타입이 안 맞으니 못 들어가서 타입 에러가 나와야 하지 않나요?

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

고차함수는 맞게 이해하셨습니다. 함수를 인수로 받는 함수라고 할 수 있습니다.

highPrintTest(::printTest)에서 ::printTest는 함수 그 자체를 의미하는데, 이 함수는 String 타입의 인수를 받아 println을 출력하는 함수입니다. 그리고 highPrintTest 함수에서는 이 함수를 3번 실행하고, 그 결과 값인 Unit을 리턴합니다.

따라서 highPrintTest(::printTest)에서 ::printTest는 함수 자체를 인수로 받게 되고, 함수의 결과값이 들어가는 것이 아닙니다. 또한, highPrintTest 함수에서는 printTest(String) 함수를 호출하지 않기 때문에, 타입 에러가 발생하지 않습니다.

아마도 ::printTest와 같이 함수만 전달하면, 함수가 실행되면서 함수 내부에서 printTest 함수를 호출하여 결과 값을 도출하는 식으로 동작하는 것이 일반적으로 사용되는 방법입니다.

위 내용으로도 이해가 어려운 부분이 있다면, 질문을 보다 구체적으로 설명해 주시면 더 정확한 답변을 드릴 수 있을 것 같습니다. 감사합니다.

Seongjin Lee님의 프로필 이미지
Seongjin Lee
질문자

highPrintTest(::printTest)를 했을때 어떤 함수가, 어떤 순서로 호출되는지 순서도를 알려주시면 안 될까요? 이렇게 매우 친절한 답변에도 불구하고 고차함수 자체가 어려워서 좀 난해하네요.

 

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

imageimage

위의 코드와 같이 간단하게 디버깅해보셔도 좋습니다 :)

Seongjin Lee님의 프로필 이미지
Seongjin Lee

작성한 질문수

질문하기