반응형
일급 객체(First Class Object)
- 변수에 할당(assignment)
- 다른 함수를 인자(argument)로 전달
- 다른 함수의 결과로서 리턴
- 위에 대한 조건으로 인해 알 수 있는 것은 함수를 데이터(string, number, boolean, array, object) 다루 듯이 다룰 수 있다는 점
object Main {
@JvmStatic
fun main(args: Array<String>) {
val a = test
}
val test: () -> Unit = { println("kotlin") }
}
public class java {
public static void test(){
System.out.println("java");
}
public static void main(String[] args) {
System.out.println("java");
Object a = test;
}
}
변수에 할당(assignment)
const mul = function (num) {
return num*num;
}
다른 함수를 인자(argument)로 전달
function mul(num) {
return num*num;
}
// func는 매개변수임, 이름은 아무거나 지정해도 상관없음
function mulNum(func, number) {
return func(number);
}
let result = mulNum(mul, 3); // 9
다른 함수의 결과로 리턴
function add(num1) {
return function (num2) {
return num1 + num2;
}
}
add(3)(4); // 7
함수가 일급객체이기 때문에 할 수 있는 것은?
- 고차함수(Higher order function)를 만들 수 있다.
- 콜백(callback)을 사용할 수 있다.
고차함수(Higher-order function)
- 함수를 전달인자(argument) 또는 매개변수(parameter)로 받거나 함수를 리턴하는 함수
# 다른 함수를 인자로 받는 경우
function mul(num) { return num * num }
function mulNum(func, num) {
return func(num);
}
# 함수를 리턴하는 경우
function mul(num1) {
return function(num2) {
return num2*num1;
};
}
# 함수를 인자로 받고, 함수를 리턴하는 경우
function mul(func) {
func();
return function(func1) {
return func1();
};
}
콜백함수(callback)
- 전달인자(Argument)로 받는 함수
// 일반함수
const mul = function(num) { return num * 2 }
// 매개변수(parameter)로 func를 받았고, 함수(func)를 리턴하기 때문에 고차함수
const mulNum = function(func, num) { return func(num) }
// mulNum은 전달인자(argument)로 함수(mul)을 받았으므로 고차함수
// 전달인자(argument)로 받은 함수인 mul은 콜백함수
mulNum(mul, 3) // 6
반응형
'개발 > 개념' 카테고리의 다른 글
CORS (0) | 2022.10.27 |
---|---|
REST API (0) | 2022.10.21 |
Web Server, WAS (2) | 2022.10.07 |
[가상화, 클라우드] 가상화와 클라우드 (0) | 2021.02.23 |
[테스트] 애플리케이션 테스트 (0) | 2021.02.03 |
댓글