티스토리 뷰

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()

 

'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/05   »
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
글 보관함