본 글은 https://kotlinlang.org/docs/home.html 를 기반으로 작성자 마음대로 번역한 글입니다.
오역 & 의역이 빈번하며 모든 질문 및 태클 환영합니다!
2022-02-17 기준으로 작성되었습니다.
하나의 추상 메소드만 가지는 인터페이스를 functional interface 혹은 Single abstract Method (SAM) interface라고 부릅니다. 함수형 인터페이스는 추상이 아닌 멤버는 여러개 가질 수 있지만 추상 멤버는 하나만 가질 수 있습니다.
코틀린에서 함수형 인터페이스를 선언하기 위해서, fun 지시자를 사용하세요.
SAM conversions
함수형 인터페이스는, lambda expressions↗을 사용하여 코드를 보다 간결하고 가독성 있게 도와주는 SAM 변환을 사용할 수 있습니다.
함수형 인터페이스를 정석으로 구현하여 클래스를 만드는 대신, 람다식을 사용할 수 있습니다. 코틀린에서 SAM 변환을 사용하여 인터페이스의 단일 메소드의 시그니쳐와 일치하는 람다식을 인터페이스 구현을 동적으로 인스턴스화 할 수 있도록 변환할 수 있습니다.
예를 들어, 다음 코틀린 함수형 인터페이스를 살펴보겠습니다.
SAM 변환을 사용하지 않는다면, 코드를 다음과 같이 작성해야 합니다.
코틀린의 SAM 변환을 사용하면 같은 코드를 이렇게 작성할 수 있습니다.
짧은 람다식은 모든 불필요한 코드를 대체할 수 있습니다.
SAM conversions for Java interfaces↗
Functional interfaces vs. type aliases
함수형 인터페이스와 type alises↗는 다른 목적을 수행합니다. 타입 별칭은 그저 존재하는 타입에 대한 이름일 뿐입니다 - 함수형 인터페이스와 다르게 새로운 타입을 생성하지 않습니다. 특정한 함수형 인터페이스에 고유한 확장 함수를 제공하여 일반 함수 또는 타입 별칭에 사용할 수 없도록 할 수 있습니다.
함수형 인터페이스가 여러개의 비추상 멤버를 가지거나 하나의 추상 멤버를 가지는 것과 다르게 타입 별칭은 하나의 멤버만을 가집니다. 함수형 인터페이스는 다른 인터페이스를 구현하거나 확장할 수 있습니다.
함수형 인터페이스는 타입 별칭보다 유연하며 더 많은 기능을 제공하지만, 특정한 인터페이스로의 변환이 필요할 수 있으므로 구문적으로나 런타임에 비용이 많이 소모될 수 있습니다. 코드에서 사용할 것을 선택할 때, 필요를 고려해야 합니다.
- API가 특정 매개변수와 리턴 타입을 가지는 함수(임의의 함수)를 허용해야 하는 경우 - 단순 함수 유형을 사용하거나 타입 별칭을 정의하여 해당 함수 타입에 짧은 이름을 지정합니다.
- API가 함수보다 복잡한 엔티티를 허용하는 경우 - 예를 들어, 함수 유형의 시그니쳐로 표현될 수 없는 중요한 동작을 포함한 경우 - 별개의 함수형 인터페이스를 선언하세요.
https://kotlinlang.org/docs/fun-interfaces.html
Functional (SAM) interfaces | Kotlin
kotlinlang.org
'Kotlin > Docs' 카테고리의 다른 글
[Kotlin Docs] Extensions (0) | 2022.04.07 |
---|---|
[Kotlin Docs] Visibility modifiers (0) | 2022.02.24 |
[Kotlin Docs] Interfaces (0) | 2022.02.04 |
[Kotlin Docs] Properties (0) | 2022.02.03 |
[Kotlin Docs] Inheritance (0) | 2022.01.24 |