Function Programming 을 공부 하다보면 1급 객체란 말을 많이 언급됩니다. 그래서 1급 객체 (First-class citizen)란 무엇인가를 공부도하고 정리해 공유 하고자 합니다.
1급 객체란?
아래 3 가지조건을 충족한다면 1급 객체라고 할수 있습니다.
- 변수나 데이타에 할당 할 수 있어야 한다.
- 객체의 인자로 넘길 수 있어야 한다.
- 객체의 리턴값으로 리턴 할수 있어야 한다.
Java와 Kotlin의 비교를 통해 Kotlin 의 함수는 왜 1급 객체고 Java의 함수는 1급 객체가 아닌지 알아보겠습니다.
변수나 데이타에 할당 할 수 있어야 한다.
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;
}
}
kotlin은 a 에 type이 () -> Unit 인 test 함수 할당이 가능하지만, Java는 불가능 합니다.
객체의 인자로 넘길 수 있어야 한다.
object Main {
@JvmStatic
fun main(args: Array<String>) {
function(test)
}
fun function(f: () -> Unit) {
f.invoke()
}
val test: () -> Unit = { println("kotlin") }
}
kotlin 은 function 함수의 인자로 함수타입을 전달 할 수 있습니다. 하지만 Java에서는 불가능 합니다.
객체의 리턴값으로 리턴 할 수 있어야 한다.
object Main {
@JvmStatic
fun main(args: Array<String>) {
function()
}
fun function(): () -> Unit {
return { println("kotlin") }
}
}
function함수는 { println(“kotlin”) }, 즉 함수타입을 반환 합니다.
kotlin에서 함수는 변수나 data에 할당이 가능하며, 함수의 인자로 전달가능 하고, 함수의 리턴값으로도 사용 할 수 있습니다. 그렇기 때문에 kotlin의 함수는 1급 객체라고 할 수 있습니다. 반면 Java의 함수는 위 조건들을 만족하지 못하기 때문에 1급 객체라고 할수 없습니다.
'C Lang > JS Basic' 카테고리의 다른 글
함수형 프로그래밍이란 무엇인가? (0) | 2020.02.03 |
---|---|
함수형 프로그래밍? (0) | 2020.02.03 |
javascript : call, apply, bind 차이 - this의 사용 (0) | 2019.11.07 |
this알아보기 : 객체 매서드에서의 this 바인딩, 함수 내부에서의 this 바인딩, 생성자 함수 호출시 this 바인딩 (0) | 2019.11.07 |
Google JavaScript Style Guide (0) | 2019.07.07 |