RUST · FUNCTIONS

호출 가능한 값을 고르는 기준

함수 포인터와 클로저는 모두 호출할 수 있지만, 캡처 여부와 반환 방식에서 선택이 갈립니다.

Fn family
입력으로 받기

Fn, FnMut, FnOnce

클로저와 함수 포인터를 모두 받을 수 있게 트레이트 바운드로 표현합니다. 호출 방식에 따라 가장 덜 제한적인 트레이트를 고릅니다.

반환하기

impl Fn 또는 Box<dyn Fn>

반환할 구체 타입을 숨기려면 impl Trait를 쓰고, 여러 종류를 담아야 하면 트레이트 객체를 사용합니다.

상태 캡처 없음

일반 함수나 열거형 생성자는 fn 포인터로도 충분합니다.

환경 캡처 있음

클로저 타입은 고유하므로 Fn 계열 트레이트로 다룹니다.

크기를 모름

직접 dyn Fn을 반환하지 말고 포인터나 impl Trait 뒤에 둡니다.