View
오늘은 알아 볼 것
오늘은 간단히 코틀린 함수 참조에 대해서 알아보려고한다.
람다식
일단 함수에 참조에 대해서 알아기 전에 간단히 람다식에 대해서 알아보자
람다는 익명 함수를 말하며
주로 메소드를 따로 선언하지 않고 일회용으로만 사용할 때 사용한다.
아래의 있는 기본 메소드를 예시로 들어보자
fun sum(x: Int, y:Int): Int{
return x + y
}
위 함수를 람다식으로 표현하면
// 1방법
val sum = {x: Int, y: Int -> x + y}
// 2방법
val sum:(Int,Int) -> (Int) = {x:Int, y:Int -> x + y}
println(sum(2,3))
위 방법 처럼 일반적인 함수를 람다식을 통해서 표현 할 수 있으며,
기본적인 문법은 아래와 같다
{x: Int, y: Int -> x + y}
- kotlin에서 람다식을 중괄호 사이에 표현을 한다.
- x: Int, y: Int 는 파라미터를 의미한다.
- -> 는 파라미터와 본문을 나눈다.
- x + y 는 본문을 의미한다.
함수 참조
코틀린에서 SomeClass::class와 같은 클래스를 참조하는 것도 가능하지만 SomeClass:Method와 같은 클래스 내의 메소드를 참조하는 것도 가능하다. 또한 ::Funtion형식으로 함수도 참조가 가능하다.
여기서 알아 볼 것은 ::Funtion형식의 함수를 참조하는 것이다.
함수 참조는 말뜻과 같이 객체를 참조 시키듯이 함수를 참조 시키는 것이다.
만약 특정 함수의 파라미터값에 함수를 자체를 넘겨주는 인자값이 있을 경우 해당 파라미터로 들어가는 함수와 같은 형식의 함수를 참조할 수 있는 것이다. 사실 이렇게 말해도 무슨 말인지 모를것이다.
아래 예제를 보자
fun test(x: Int): Boolean{
return x % 2 != 0
}
// 단축형
// fun test(x: Int) = x % 2 != 0
위와 같이 홀수를 체크하는 함수를 람다식으로 표현한다면 (Int) -> Boolean와 같은 표션식이된다. 만약 그렇게 되면 Filter함수의 return 값이 Boolean이기 때문에 test함수를 참조하여 넘겨줄 수 있다.
아래는 해당 예시이다.
val numbers = listOf(1, 2, 3)
println(numbers.filter(::test))
솔직히 이렇게 말해도 모르겟다면 아래 예제를 보자
private fun test1(x: Int): Boolean{
return true
}
private fun test2(x: Int, testm:(Int)->Boolean): Boolean{
return true
}
private fun resultTest(){
val result = test2(1,::test1)
}
위에 있는 예제 코드를 보게 되면 test2번 함수에 매개변수 인자 값중에 함수가 넘어가는 것이 보일 것이다.(testm)
하당 함수처럼 인자값에 함수가 넘어갈 때 형식이 같은 test1 함수를 resultTest()함수에서 처럼 넘길 수 있는 것이다.
간단히 말해 우리가 아는 변수를 파라미터값으로 넘기는 것이 함수로 대체 되었다고 보면된다.
솔직히 처음 보면 어렵다. 하지만 알게 되면 참 좋은 방법인 것 같다.
다음에는 사용한 예제를 보여주겠다.
'TIL > 스터디' 카테고리의 다른 글
앱 배포시 apk -> aab로 왜 바꿀까? (0) | 2024.04.15 |
---|---|
함수 참조 (RecyclerView) 사용 (0) | 2024.04.11 |
TabLayout 스크롤 감지 (Viewpager안썻을 때) (0) | 2024.03.28 |
LinearLayoutMananger(RecyclerView 스크롤 제어) (0) | 2024.03.27 |
ScrollView, DataBinding(하위 View 1개만) (1) | 2024.03.26 |