[Rust] 나만 몰랐던 기능: 트레잇 메서드의 정적호출

난 여태 트레잇의 메서드는 실제 구현된 객체에서 메서드의 형태로만 호출이 가능한 줄 알았다. 하지만 아니었다.

트레잇 메서드를 트레잇에 대한 정적함수처럼 호출하는 것이 가능했다...
이렇게 말이다. image

image ToString은 우리가 늘 써오던 to_string() 메서드의 트레잇이고, 당연히 to_string(&self)가 들어있다. image

image

그냥 정적함수처럼 호출하되, &self 등의 인자만 잘 전달해주면. 해당 인자의 타입을 추적해서 그 구현체를 잘 실행해주는 것이다.

이렇게만 보면 별 쓸모가 없을 것지만, 종종 유용할 때가 있다.
클로저를 전달해야 하는데, 해당 클로저의 로직이 특정 트레잇 메서드 그 자체일 때다.
트레잇 메서드를 정적으로 넘기면 그냥 제너릭한 클로저처럼 동작한다.

아래는 다소 부자연스러운 코드지만, 어쨌든 동작한다. image

image &i32의 배열을 받아서 map, 문자열로 전부 치환하는 것이다. to_string이 &self를 받기 때문에 정수리터럴들도 대강 참조로 맞춰놨다.

여튼, 알아두면 종종 쓸만할 것 같다.
이 사용 패턴도 rustc 코드 뜯어보다 알게 됐다..