[Rust] 모듈 사용 팁
경로 임의 지정
러스트의 모듈 포함 키워드인 mod는 경로가 기본적으로 고정되어있어 조금 불편한 점이 있다.
**mod asdf;**라고 쓴다면 ./asdf.rs나 ./asdf/mod.rs만을 가져오는 구조기 때문이다.
다행히도 이건 회피법이 있다. path라는 특수한 매크로를 이용하는 것이다.

#[path="..."]의 형태로 mod 위에 경로를 명시해주면 모듈명도 내맘대로, 경로도 내맘대로 할 수 있다.

뚜둔
중복포함 문제
러스트의 모듈시스템은 C++보단 우월하지만 그래도 조금 불편한게 있긴 하다.
포함관계가 막 이어지고 복잡할 때는 무조건 mod만 쓰면 안된다.
만약 A를 B에서 포함시키고, C에서 또 포함시킨다음 B와 C를 메인 로직에 포함시키면 어떨까?
예시는 다음과 같다.

구조체 A를 b와 c에서 동시에 포함시키고
main에서 포함시켜서, b의 A에 c의 A를 매칭시켜봤다.


그럼 어떨까?
논리적으로는 동일한 타입이어야 하지만 실제 동작은 다르다.

같은 소스였더라도 다른 곳에서 포함했다면 그것은 완전히 다른 타입이 되는 것이다.
그럼 이걸 어떻게 해야할까.
가장 바람직한 방법은 한번만 포함시키고, 그 이후로는 use만 사용해서 가져오는 것이다.
우선, 모듈들을 모아둘 파일을 하나 만들어둔다. 지금의 경우에는 main.rs로 하겠지만, 실 사용 시에는 lib.rs로 하는게 좋을 것이다.

이렇게
그리고 b와 c에서는 직접 mod하지 않고 main에서 당겨온 모듈을 간접적으로 사용한다.

super는 현재 모듈에서 한칸 위로 올라간다는 키워드다. 두칸 위에 있으면 super::super::... 처럼 하면 된다.
그럼 이제 오류가 뜨지 않을 것이다.


근데 super로 위치를 명시하는건 꽤 불편한 편이다. 모듈 구조가 깊어질수록 좀... 지저분해지기도 하고 말이다.
그래서 lib.rs나 main.rs 등의 기본 레벨 소스에서 mod를 한 경우에는 루트 모듈을 가리키는 crate 키워드를 쓰는 것이 편하다.

동일하게 동작할 것이다.