Kotlin 고차함수 (Unit)

푸른하늘·2022년 8월 5일
2
post-thumbnail

고차 함수를 들어가기 앞서 ...
Unit의 개념어떤 방식으로 사용되는지 알아보자

JAVA 의 void 와 Void

void && Void -> 반환 타입이 없으므로 생략한다는 의미입니다

public static void main(String[] args){
}
fun returnTypeVoid(): Void? {
		println("Trying with Void Return type")
}

Unit (값이 없는 형태)

Unit도 마찬가지로 아무것도 반환하지 않는 변환 타입 입니다

fun printHello(name: String?): Unit{
    if (name != null) {
        println("hello $name")
    } else {
        println("Hi")
    }
}
  • 코틀린은 Unit은 자바의 Void와 비슷하다고 합니다
    • -> 하지만 Unit은 Unit 단 하나의 값만 갖습니다
  • 반환타입이 Unit일 경우네는, return Unit;. return; 모두 선택적으로 작성해도 된다.

High Order Function(고차함수)

함수 형식의 어떻게 자료형으로 나타낼까요?
(자료형, 자료형..) 패러미터 -> 자료형(반환값)
바로 코드로 봅시다

fun main(){
	b(::a)  // 고차함수로 넘길시에 :: 넣어줘야함 
}

fun a (str: String){  //문자열은 받고 반환형이 없는 형태 
	println("$str 함수 a")
}
fun b (function : (String) -> Unit){
	function("b가 호출한") // a 함수안에 주입될 파라매터 값 
}
// b가 호출한 함수 a 
// main -> b() -> a()
fun main(){    
// 람다함수는 그자체가 고차함수이다 별도의 연산자 없이 변수에 담을수 있음
    val c: (String) -> Unit = { str -> println("$str 람다함수)}
   	b(c)
}

fun a (str: String){
	println("$str 함수 a")
}
fun b (function : (String) -> Unit){
	function("b가 호출한")
}
// b가 호출한 함수 a 
// main -> b() -> a()

실제 사용되는 사례 (Compose Rally)

Github Rally Source

onClickSeeAllCounts 을 했을때 { 일어나는 함수() }

  • compoasble (이안의 값을 받았을때 ) { } 안에 함수 실행
  • OverViewBody() -> Compoaslbe Screen
  • onClickSeeAllCounts -> SeeAllCounts 버튼을 클릭했을때 일어남
  • navController.navigate() -> 이동해라 intent랑 비슷함
 composable(RallyScreen.Overivew.name){
 	OverviewBody(onClickSeeAllCounts = {navController.navigate(RallyScreen.Accounts.name)}
 }

OverViewBody 안에 고차함수 값

  • AccountCard() 안에서도 람다 고차함수를 이용해 위로 신호를 올려보냄
@Composable
fun OverviewBody(
    onClickSeeAllAccounts: () -> Unit = {},
) {
	AccountsCard(onClickSeeAllAccounts, onAccountClick = onAccountClick)
}
@Composable
private fun AccountsCard(onClickSeeAll: () -> Unit){
	OverviewScreenCard(
        onClickSeeAll = onClickSeeAll
        )
}
@Composable
private fun <T> OverviewScreenCard(
    title: String,
    amount: Float,
    onClickSeeAll: () -> Unit,
    )
    {
    SeeAllButton( ){
             onClick = onClickSeeAll)
             }
    }

정리 하자면 android 고차함수는 여러가지 상황에서 많이 쓰인다
compose 로 예로 들자면 주로 상태호이스팅
즉, onClick라는 신호를 받을시에 위로 신호를 보내 함수로 전달해주는대 주로 사용이 된다

순서
OverviewScreenCard() -> AccountCard() -> OverViewBody() ->navigation compoasable()

profile
Developer-Android-CK

0개의 댓글