→ typealias 키워드로 람다식의 타입을 지정해, nullable 하게 이용할 수 있다

사용예시 (listener nullable 타입 지정)

// 외부에서 injection 할 람다식 type 정의
typealias OnSelectListener = (PointData) -> Unit
typealias OnDrawListener = (PointData, SizeData, Path) -> Unit

private var setOnSelectedRectListener : OnSelectListener? = null
private var setOnMovingPointListener : OnSelectListener? = null
private var setOnDrawListener : OnDrawListener? = null

// CustomView에서 ViewModel 값 변화시키기 위한 함수 외부에서 구현후 injection
fun setOnSelectedRect(listener: OnSelectListener) {
    this.setOnSelectedRectListener = listener
}

fun setOnMovingPoint(listener : OnSelectListener){
    this.setOnMovingPointListener = listener
}

fun setOnDrawRect(listener : OnDrawListener){
    this.setOnDrawListener = listener
}

// 이용하기

setOnDrawListener?.let{ it -> it(point,size, drawingPath) }
setOnSelectedRectListener?.let { it1 -> it1(PointData(x, y)) }
setOnMovingPointListener?.let{ mp -> mp(PointData(x, y))}