티스토리 뷰

kotlin

SAM Conversions

길 킴 2019. 12. 30. 17:43
728x90

간단하게 추상 메소드 한개를 가진 인터페이스를 뜻한다.

- Single Abstract Method

- lamda 식을 제공

- interface/ abstract 이어야 하고, 1개의 abstract method를 가지고 있어야 함

- setter 가 정의되어 있어야 함


주의사항

JAVA에서 만들어진 interface/ abstract 클래스는 kotlin에서 람다식으로 사용할 수 없다. 

interface MyOnClickListener {
    void onClick()
}

public void setOnMyOnClickListener (MyOnClickListener listener) {
	this.onClickListener = listener;
}

<JAVA>
tv.setOnMyOnClickListener {
}

<KOTLIN> 
tv.setOnMyOnClickListener (object: MyOnClickListener {
	@override
    fun onClick() {
    	// code
    }
}    

위에서 kotlin의 경우 Anomymous Class (익명 클래스) 를 사용해야 한다. 


그러면 kotlin에서 lamda식을 활용하려면?  => Higer Order Function 을 사용해야 한다. 

(참고로, Higer Order Function 이란 고차원 함수로 함수를 변수처럼 사용하는 것을 말한다.
val myFun : () -> Unit 같은 형태를 많이 보셨죠?)

var onMyClickListener: (() -> Unit)? = null

tv.setOnMyClickListener {

}

 

※ 좋은 팁!

위의 kotlin 예시의 onMyClickListener를 실행하려면 어떻게 해야할까? 

=> invoke() 함수를 활용하면 된다. 

onMyClickListener?.invoke()

 


📗 <용어 정리> 

- Higher-order function (고차함수) : 함수를 인자로 받거나, 함수를 반환하는 함수 를 의미한다.   

- Lambda 식 : 람다식 (Lambda Expression) 은 익명 함수를 의미하며, 이름 없이 정의된 함수로, 간결하게 작성된 일급 함수 표협 입니다. 주로 함수를 값처럼 전달하건 저장할 때 사용됩니다.  

- first-class function (일급 함수) : 함수를 값처럼 취급할 수 있어, 변수에 저장하거나 인자로 전달하고 반환할 수 있는 함수를 말합니다. 



위의 정의들이 헷갈릴 수 있다. 뭔가 서로 비슷한 말이고 포함된 느낌이 든다면! 

-> 람다식고차함수를 사용하는 주요 수단 중 하나라고 볼 수 있다. 
-> 고차 함수일급 함수의 특성을 활용하여 함수를 인자로 받거나 반환하는 특정 유형의 함수이다. 

 

'kotlin' 카테고리의 다른 글

Reified란? (Type Eraser)  (0) 2020.09.07
Kotlin - filter, map 은 알겠는데, Sqeuence 란?  (0) 2020.05.25
Generic  (0) 2019.10.15
Kotlin - Nested / Inner class  (0) 2019.08.25
Kotlin 자세히 알아보기 -Higer-Order Function  (0) 2019.08.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함