typealias Step = Actions.() -> Unit
Step은 Action을 수신 객체로 받아서 Unit을 반환하는 함수 타입이다(부록 B 확장 함수 참고). 일반 함수 대신 확장 함수를 사용하는 이유는 단계 내부에서 Action의 메서드를 더 쉽게 호출할 수 있기 때문이다.
그런 다음 Actions 인터페이스의 runScenario 메서드가 가변적인 개수의 단계를 취하도록 변경해야 한다. 이제 ApplicationForAT의 구현은 다음과 같다.
fun runScenario(vararg steps: Step) {
server.use {
steps.onEach { step -> step(this) }
}
}
이런 방식으로 각 단계를 실행하도록 Actions 인터페이스에게 파라미터로 전달한다3.
액터로 돌아가서 단계를 새로운 함수로 반환하는 방법을 살펴보자.