호출 가능한 객체
호출 가능한 객체 (Callable objects)
Dart에서는 클래스의 인스턴스를 마치 함수처럼 호출할 수 있는 '호출 가능한 객체(callable object)'를 만들 수 있어요. 어떻게 만드는지, 언제 유용한지 함께 볼게요.
출처: Dart 공식 문서
본문
자신의 Dart 클래스 인스턴스를 함수처럼 호출하고 싶다면, call() 메서드를 구현하면 돼요.
call() 메서드를 정의한 클래스의 인스턴스는 함수처럼 동작해요. 이 메서드는 일반 함수와 마찬가지로 파라미터와 반환 타입 같은 기능을 모두 지원해요.
다음 예시에서 WannabeFunction 클래스는 세 개의 문자열을 받아 공백으로 구분하고 느낌표를 붙여 연결하는 call() 함수를 정의했어요. 각 문자열 사이를 공백으로, 마지막에는 느낌표를 붙여서요.
class WannabeFunction {
String call(String a, String b, String c) => '$a $b $c!';
}
var wf = WannabeFunction();
var out = wf('Hi', 'there,', 'gang');
void main() => print(out);
핵심은 var wf = WannabeFunction();으로 객체를 만들고, 그다음 wf('Hi', 'there,', 'gang')처럼 그 객체를 함수처럼 호출한다는 거예요. Dart는 이 호출을 wf.call('Hi', 'there,', 'gang')으로 해석해요. 이렇게 call()을 구현해 두면 클래스 인스턴스 자체를 값처럼 넘겨서 호출 지점에서 깔끔하게 쓸 수 있어요.