fn closure

함수, 클로저, trait object는 저장할 정보와 호출 방식이 다르다

캡처가 필요한지, 정적 dispatch가 필요한지, 컬렉션에 담아야 하는지를 기준으로 고릅니다.

fn

fn 포인터

환경을 캡처하지 않는 일반 함수나 enum variant 생성자를 넘깁니다.

generic

제네릭 클로저

호출 지점에서 타입을 알 수 있고 성능상 정적 dispatch가 유리합니다.

dyn

Box<dyn Fn>

서로 다른 클로저를 같은 컬렉션이나 구조체 필드에 담을 때 씁니다.

trait

Fn 계열

읽기만 하면 Fn, 변경하면 FnMut, 소비하면 FnOnce 경계를 고릅니다.