본문 바로가기
Kotlin

Kotlin - 기타기능(고차함수, 동반객체)

by 봄석 2019. 1. 3.

Kotlin - 기타기능(고차함수, 동반객체)


유용한 기타 기능


- 확장 함수 : 원래 있던 클래스에 기능을 추가하는 함수

- 형변환 : 숫자형 자료형끼리 쉽게 형변환 가능

- 형 체크 : 변수의 형이 무엇인지 검사하는 기능

- 고차 함수 : 인자로 함수를 전달하는 기능

- 동반 객체 : 클래스의 인스턴스 생성 없이 사용할 수 있는 객체

- let() 함수 : 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수

- with() 함수 : 인자로 객체를 받고 블록에서 수행된 결과를 반환하는 함수

- apply() 함수 : 블록에 자기 자신을 전달하고 이 객체를 반환하는 함수

- run() 함수 : 익명함수처럼 사용하거나, 블록에 자기 자신을 전달하고 수행된 결과를 반환하는 함수


고차함수

코틀린에서는 함수의 인수로 함수를 전달하거나 함수를 반환할 수있습니다.

이렇게 다른 함수를 인수로 받거나 반환하는 함수를 

고차함수(higher-order function, 고계함수)라고 합니다.


add 함수는 x, y ,callback 세 개의 인수를 받습니다. 내용은 callback에 x와 y의 합을 전달합니다.

여기서 callback은 하나의 숫자를 받고 반환이 없는 함수입니다. 자바에서는 주로 인터페이스를 활용하는데 코틀린은 함수를 활용하는 점이 다릅니다.

//인수: 숫자, 숫자, 하나의 숫자를 인수하는 반환값이 없는 함수
fun add(x:Int,y:Int, callback:(sum:Int)->Unit){
    callback(x+y)
}
 
//함수는 {}로 감싸고 내부에서는 반환값을 it로 접근할 수있음

add(5,3,{println(it)}) //8



동반객체

안드로이드 프래그먼트 컴포넌트를 다룰 때 자동으로 동반 객체 컴포넌트가 생성됩니다.


프래그먼트는 특수한 제약 때문에 팩토리 메소드를 정의하여 인스턴스를 생성해야 합니다. 팩토리 메소드는 생성자가 아닌 메소드를 사용해 객체를 생성하는 코딩 패턴을 말하는데 클래스와 별개로 보며 포함 관계도 아닙니다. 코틀린에서는 자바의 static과 같은 정적인 메소드를 만들 수 있는 키워드를 제공하지 않습니다. 대신 동반 객체(companion object)로 이를 구현합니다.

class Fragment{
    companion object {
        fun newInstance():Fragment{
            println("생성됨")
        }
    }
}
 

val fragment=Fragment.newInstance()


다음 newInstance() 정적 메소드를 사용해서 Fragment 객체를 생성하는 팩토리 패턴을 구현 및 사용 예입니다.

여기서 동반 객체의 내부 메소드는 Fragment 클래스와 아무 관계가 없는 정적인 존재입니다.



댓글