Bob Belderbos: 왜 Rust는 메서드를 사용... 노트

Bob Belderbos: 왜 Rust는 메서드를 사용하기 위해 트레이트를 임포트하게 만드는가

새로운 Rust 학생이 File 객체에서 read_to_string을 호출하려고 할 때 오류를 만났습니다. 컴파일러는 해당 메서드가 존재하지 않는다고 표시했습니다. 해결책은 파일 상단에 use std::io::Read;를 추가하는 것이었습니다. 이 import는 파일 작업이 의도되었다면 std::io::File이 import될 것으로 예상했던 학생을 혼란스럽게 했습니다.혼란의 핵심은 Rust의 trait 시스템에 있습니다. read_to_string 메서드는 File 타입 자체의 고유한 메서드가 아닙니다. 대신, File이 구현하는 Read trait에 의해 정의됩니다. Read trait을 import하면 해당 메서드를 Rust 컴파일러의 메서드 조회에 사용할 수 있게 됩니다.이 메커니즘은 일반적으로 메서드 가용성이 객체의 타입에 직접적으로 연결되는 Python과 상당히 다릅니다. Rust에서는 trait이 다양한 타입에 걸쳐 공유되는 동작을 정의하는 방법을 제공하여 다형성과 코드 재사용을 촉진합니다. 예를 들어, File, TcpStream, Stdin은 모두 Read trait을 구현하여 유사한 읽기 기능을 제공할 수 있습니다.따라서 use std::io::Read;는 함수를 직접 사용하는 것이 아니라 Read 인터페이스를 스코프로 가져오는 것입니다. 이를 통해 컴파일러는 해당 trait을 구현하는 타입에 대한 메서드 호출을 해결할 때 Read trait을 고려할 수 있습니다. trait을 이해하는 것은 특정 관련 없어 보이는 import가 Rust에서 메서드 기능에 왜 필요한지 이해하는 데 중요합니다. 이 접근 방식은 코드 중복을 피하고 제네릭 프로그래밍을 가능하게 합니다. 컴파일러의 오류 메시지인 "trait Read is implemented but not in scope"는 이 trait 해결 문제를 직접적으로 가리킵니다.