Observe 패턴이나 이벤트 리스너 등, Callback의 쓰임이 앞으로도 많을 것 같아서 포스팅하면서 내용을 정리하려 한다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
function {
println(it)
}
}
fun function(callback: (String) -> Unit) {
callback("콜백!!")
람다식은 이름 없는 함수로, 사용 방법은 다음과 같다.}
1번의 예시 코드로, function 함수의 인자로 println 함수를 넣어서, 내부에서 콜백을 호출하고 있다.
callback을 인자로 받을 때
(받을 함수의 인자) -> (받을 함수의 반환 타입) 형식을 사용한다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
function{
s : String->println(s)
}
}
fun function(callback: (String) -> Unit) {
callback("콜백!!")
}
람다식은 이름 없는 함수로, 사용 방법은 다음과 같다.
val sum : (Int, Int) → Int = {x, y → x+y}
인자의 자료형 -> 반환 자료형 형식을 사용한다. 하지만, 코틀린의 스마트 캐스트 기능에 의해 다음과 같이 간결해진다.
val sum = {x: Int, y: Int → x+y}
다시 본 코드로 돌아가면, void 타입을 반환하고 String을 인자로 받는 함수가 function의 인자로 들어가게 되고,
callback이라는 이름으로 다시 태어난 람다식은 인수를 넣어서 출력하기만 하면 된다.
그러나 위의 예제들은, 순차적으로 위에서 부터 실행하는 순차적인 코드로, 콜백이 아니더라도 만들 수가 있다. 하지만 이벤트 리스너나, 비동기 프로그래밍에서는 비 순차적인 함수 호출이 일어날 수 있다.
다음 장에서는, 이벤트 리스너를 직접 구현하면서 콜백 메서드의 필요성을 설명하려고 한다.
https://velog.io/@evergreen_tree/Android-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A6%AC%EC%8A%A4%EB%84%88%EB%A5%BC-%EC%9D%B4%ED%95%B4%ED%95%B4%EB%B3%B4%EC%9E%90