-
38장 - 연산 또는 액션을 전달할 때는 인터페이스 대신 함수 타입을 사용하라Kotlin/Effective Kotlin 요약 2023. 3. 27. 00:01
대부분의 프로그래밍 언어에는 함수 타입이란 개념이 없습니다.
보통 Single-Abstract-Method이라 불리는 메서드가 하나만 있는 인터페이스를 활용합니다.
interface OnClick{ fun clicked(view: View) } //함수가 SAM을 받음 fun setOnClickListener(listener: OnClick){ //... } //함수 타입을 사용하는 코드로 변경 fun setOnClickListener(listener: (View) -> Unit){ //... }
함수 타입을 사용하는 코드를 활용한다면 많은 자유를 얻을 수 있습니다.
- 람다 표현식 또는 익명 함수로 전달
- 함수 레퍼런스 또는 제한된 함수 레퍼런스로 전달
- 선언된 함수 타입을 구현한 객체로 전달
SAM의 장점은 '아규먼트에 이름을 붙이는 것입니다'
하지만 type aliase를 활용하면 함수 타입도 이름을 붙일 수 있습니다.
fun setOnClickListener(listener: OnClick){ //... } typealias OnClick = (view: View)-> Unit
언제 SAM을 사용해야 할까?
코틀린이 아닌 다른 언어에서 사용할 클래스를 설계할 때입니다.
자바에서는 인터페이스가 더 명확합니다
함수 타입으로 만들어진 클래스는 타입 별칭과 IDE의 지원 등을 제대로 받을 수 없습니다.
'Kotlin > Effective Kotlin 요약' 카테고리의 다른 글
40장 - equals 규약을 지켜라 (0) 2023.03.29 39장 - 태그 클래스보다는 클래스 계층을 사용하라 (0) 2023.03.28 37장 - 데이터 집합 표현에 data 한정자를 사용하라 (0) 2023.03.26 36장 - 상속보다는 컴포지션을 사용하라 (0) 2023.03.25 35장 - 복잡한 객체를 생성하기 위한 DSL을 정의하라 (0) 2023.03.21