First-class functions
는 일급함수로 변역됩니다.
최근에 만들어진, 함수형 프로그래밍을 지원하는 언어들은 대부분 일급함수를 지원하고 있습니다.
JAVA8도 최근 일급함수를 지원하기 시작하였습니다.
일급함수는 고차함수(Higher-order-functions), 람다표현식(Lambda expression) 등을 이해하는데 알아야하는 개념입니다.
일급함수는 객체로 취급되는 함수를 의미하며 다음과 같은 특징을 갖고 있습니다.
- 일급함수는 함수가 객체로 취급될 수 있습니다.
- 일급함수는 함수 객체를 인자로 넘길 수 있어야 합니다.
- 일급함수는 함수 객체를 인자로 넘길 수 있어야 합니다.
각각의 내용들이 무엇인지 예제와 함께 알아보겠습니다.
일급함수는 함수가 객체로 취급될 수 있습니다
아래 코드에서 변수 hello
에 hello world
를 리턴하는 함수를 할당할 수 있습니다.
val hello: () -> String = {"hello world"}
일급함수는 함수 객체를 인자로 넘길 수 있어야 합니다
아래 코드에서 printHello
는 인자로 스트링을 리턴하는 함수를 받고 있습니다.
main을 보시면 printHello
는 hello
를 인자로 넘길 수 있습니다.
val hello: () -> String = {"hello world"}
fun printHello(func: ()->String) {
print("${func()}")
}
fun main(args: Array<String>) {
printHello(hello)
}
실행 결과
hello world
일급함수는 함수 객체를 함수의 결과로 리턴할 수 있습니다
아래 코드에서 returnHello
는 리턴 값으로 스트링을 리턴하는 함수를 리턴합니다.
main에서는 이 함수를 받아 호출하여 hello world
라는 스트링을 출력했습니다.
val hello: () -> String = {"hello world"}
fun returnHello(): () -> String {
return hello
}
fun main(args: Array<String>) {
val returned: ()->String = returnParamFunc(hello)
print("${returned()}")
}
실행 결과
hello world
정리
일급함수의 정의와 의미에 대해서 간단히 알아보았습니다. 언어가 일급함수를 지원한다는 것은 고차함수(Higher order functions)를 사용할 수 있다는 것과 같습니다. 함수형 프로그래밍을 공부하다보면 두개의 개념이 자주 나옵니다. 의미에 대해서 미리 알아두면 함수형 프로그래밍을 공부하는데 도움이 됩니다.
참고
Loading script...
Related Posts
- Kotlin - 배열에서 최소 값, 최대 값 찾기
- Kotlin - 2차원 배열 선언, 초기화 방법
- Kotlin - 배열 선언, 초기화 방법
- Kotlin - 리스트, 배열 길이 가져오기
- Kotlin - 리스트에서 최대, 최소 값 찾기
- Kotlin - for 반복문, 배열/리스트 순회
- Kotlin - Timer, 주기적으로 함수 실행
- Kotlin - sleep, 쓰레드 몇 초 지연
- Kotlin - Thread 생성 및 실행
- Kotlin에서 정규표현식 사용하기
- Kotlin - 문자열 길이 계산
- Kotlin - 문자열 비교 방법(equals, ==, compareTo)
- Kotlin - 2개의 배열 하나로 합치기
- Kotlin - 2개의 List 하나로 합치기
- Kotlin - 디렉토리의 모든 파일 리스트 출력
- Kotlin - 리스트 정렬 방법 (sort, sortBy, sortWith)
- Kotlin - 문자열 뒤집기 (Reverse String)
- Kotlin - 랜덤 숫자 생성 (Random, SecureRandom)
- Kotlin - Range, 숫자 범위 표현
- Kotlin - 음수를 양수로 변환, math.abs()
- Kotlin - List를 Set로 변환
- Kotlin - Set를 List로 변환
- Kotlin - 문자열에서 숫자(int)만 추출하는 방법
- Kotlin - Map을 List로 변환하는 방법
- Kotlin - File, Directory가 존재하는지 확인
- Kotlin - List를 Map으로 변환
- Kotlin - List의 중복 요소 제거
- Kotlin - List를 Array로 변환
- Kotlin - 엘비스 연산자 (Elvis Operation)
- Kotlin - Array를 List로 변환
- Kotlin - String을 Float으로 변환
- Kotlin - String을 Double으로 변환
- Kotlin - String을 Int로 변환
- Kotlin - String을 Long으로 변환
- Kotlin - String Null 또는 Empty 체크