코틀린에서 함수가 일급 객체로 활용되는 부분에 대해서 살펴보겠다.
코틀린의 함수 내에는 다양한 구성요소를 포함시킬 수 있다.
fun superFun() {
val superData = "hello"
fun subFun1() {
println("subFun1() .. superData : $superData")
}
fun subFun2(a: Int, b: Int): Int {
subFun1()
return a + b
}
class SubClass{
fun classFun(){
println("classFun() .. superData : ${superData}")
}
}
subFun1()
SubClass().classFun()
}
함수를 클래스에 포함하지 않고, 함수 내부에 변수, 함수, 클래스를 선언했다.
또 함수를 변수처럼 이용할 수 있다.
val funVal = fun someFun(){
} //에러가 난다.
변수를 선언하듯이 함수를 대입해보았다.
하지만 이런 일반적인 방법으로는 컴파일 에러가 난다.
코틀린에서 함수를 변수에 대입하려면 람다 함수 또는 함수 참조(Function Reference)를 이용해야한다.
fun main() {
val funVal1 = { x: Int ->
println("hello world")
x * 10
}
println("value : ${funVal1(10)}")
}
위의 소스코드는 람다 함수를 사용하여 변수에 대입했다.
funVal1(10)처럼 변수를 함수처럼 사용이 가능하다.
10이라는 값을 전달하고, hello world를 출력한 후,
x * 10 (10 * 10)을 리턴하여 funVal1에 값을 넣어주게 된다.
그렇기에 아래와 같은 결과 값이 나오게 된다.
[결과값]
hello world
value : 100
코틀린에서 함수를 변수에 대입하는 방법은 위처럼 람다 함수를 많이 이용하지만,
함수 참조를 이용할 수도 있다.
함수 참조를 이용한다는 것은 ::이라는 연산자를 이용하여 함수를 변수에 대입하는 방법이다.
fun someFun(){
println("i am some function")
}
val funVal2 = ::someFun
fun main() {
funVal2()
}
이러한 함수 참조는 리플렉션(Reflection) 기법이라고 하며 나중에 자세히 설명하겠다.
여기에서는 ::이라는 연산자로 함수를 변수에 대입할 수 있다 정도만 알고 넘어가도록 하자.
'프로그래밍 > 코틀린' 카테고리의 다른 글
[코틀린] 고차함수 - 함수 반환 (0) | 2020.03.19 |
---|---|
[코틀린] 고차함수 - 매개변수 대입 (0) | 2020.03.19 |
[코틀린] 람다 표현식 (0) | 2020.03.04 |
[코틀린] 순수함수로 정의 될 수 있는 함수 (0) | 2020.02.29 |
[코틀린] 함수형 프로그래밍이란? (0) | 2020.02.29 |