[17강] https://youtu.be/GxZWb5Whq7w
1. Callback구조
예를들어, 센서업체에서 모듈을 제작해서 팔 때, 또는 운영체제를 만들 때, (해당기능에 대하여)
제작자는 해당 함수가 언젠가 호출되어야 할 것은 알지만, 누가 언제 호출 할 지는 알 수 없고,
미래에 사용자가 정해지면 비로소 사용자와 제작자의 호출관계가 성립됩니다.
이 때, 제작자는 나중에 호출 될 함수이름만 정해주고, 미래에 사용자가 해당 함수를 자기 입맛에 맞게 정의해서 사용하는 구조를 Callback구조라고 합니다. (반대말 Call)
시나리오. 제작자가 Sensor를 개발할 때, Sensor는 무언가 측정하여 측정된 5번 중 1번씩 계속 Listener에게 보내주도록 설정 하였다. 나중에 사용자가 Sensor를 구입했고, 사용자는 Sensor값을 관찰하여 30을 넘어가면 경고가 뜨도록 설치하였다.
fun main() {
var myRobot = UserClass()
myRobot.start()
}
interface Listener {
fun onEvent(parameter : Int)
}
class Sensor(var l : Listener) {
fun powerOn() {
for(i in 1..60) {
if(i % 5 == 0)
l.onEvent(i)
}
}
}
class UserClass : Listener {
override fun onEvent(parameter: Int) {
if(parameter<30)
println("$parameter : Good")
else
println("$parameter : Warnning")
}
fun start() {
val ss = Sensor(this)
ss.powerOn()
}
}
5 : Good
10 : Good
15 : Good
20 : Good
25 : Good
30 : Warnning
35 : Warnning
40 : Warnning
45 : Warnning
50 : Warnning
55 : Warnning
60 : Warnning
2. 익명 객체
아래 예시는 위와 동일한 결과를 수행합니다.
다만, 1번 예시는 함수를 구현한 뒤에 (이름을 붙여주고) 자신의 전체 정보를 넘겨주었다면, 다음 예제는 재정의 함수만 정의하여 넘겨주는 구조입니다.
fun main() {
var myRobot = UserClass()
myRobot.start()
}
interface Listener {
fun onEvent(parameter : Int)
}
class Sensor(var l : Listener) {
fun powerOn() {
for(i in 1..60) {
if(i % 5 == 0)
l.onEvent(i)
}
}
}
class UserClass{
fun start() {
var ss = Sensor(object: Listener {
override fun onEvent(parameter: Int) {
if(parameter<30)
println("$parameter : Good")
else
println("$parameter : Warnning")
}
})
ss.powerOn()
}
}
'코틀린' 카테고리의 다른 글
[Youtube DiMo] 19강. 제네릭 (0) | 2022.04.29 |
---|---|
[Youtube DiMo] 18강. 다형성 (0) | 2022.04.29 |
[Youtube DiMo] 16강. Object (0) | 2022.04.29 |
[Youtube DiMo] 14-15강. 고차함수(함수포인터)와 람다함수/스코프함수 (0) | 2022.04.29 |
[Youtube DiMo] 12-13강. Scope, 접근제어자 (0) | 2022.04.29 |
댓글