모듈의 기본
아래 cargo 명령어는 실행용 프로젝트를 생성함
cargo new communicator --bin
아래와 같이 --bin 을 빼면 라이브러리 프로젝트를 생성함
cargo new communicator
실행용 프로젝트에 main.rs 가 존재한다면, 라이브러리 프로젝트에는 lib.rs 가 존재함 각각 각 프로젝트의 메인 파일임.
아래 코드는 network 라는 모듈을 생성함.
같은 파일(현재는 lib.rs)에 몇 개의 모듈이든 둘 수 있음.
당연하게도, 각 connect 함수는 서로 다른 범위에 존재하기에, 충돌은 없음. 각각 network::connect() / client::connect() 로 호출됨.
한 모듈은 자신의 서브모듈(자식모듈)을 얼마든지 가질 수 있음.
이제 connect 함수는 각각 network::connect() / network::client::connect() 로 호출됨.
다른 파일로 모듈 이동하기
모듈 파일 규칙은 다음과 같음.
- 분리하려는 모듈, foo 가 있고, foo 에 서브모듈이 없을 경우, foo 가 선언된 같은 경로에 foo.rs 파일을 만들면 됨.
- 분리하려는 모듈, foo 가 있고, foo 에 서브모듈이 있을 경우, foo 디렉토리를 만들고 mod.rs 파일을 만들면 됨. foo 모듈 본문은 mod.rs 에 작성.
아래 코드가 있음(lib.rs). 여기서 client 모듈을 분리할 것.
그리고 같은 경로(client 가 lib.rs 에 선언되었으니 root 경로)에 client.rs 파일을 만들어 여기에 본문을 작성
모듈 파일에 다시 mod 를 쓸 필요는 없음. mod 를 또 쓸 경우, 여기서 또다른 서브모듈을 선언하는 셈이 됨.
그리고 network 모듈도 분리하자면, lib.rs 를 다음과 같이 수정.
network 모듈은 server 라는 서브모듈을 가지고 있음. 규칙에 따라, network 라는 디렉토리를 만들어 그 안에 mod.rs 파일을 만들고 network 모듈의 본문을 그대로 복사. network/mod.rs 파일 내용은 다음과 같음.
여기서 또 server 모듈을 분리자면, network/mod.rs 파일을 다음과 같이 수정.
그리고 mod.rs 의 경로(network 디렉토리) 에 server.rs 파일을 만들고 여기에 본문을 그대로 복사. network/server.rs 파일 내용은 다음과 같음.
클리어.
이제 모듈 구조는 다음과 같음.
모듈의 파일 구조는 다음과 같음.
'Rust' 카테고리의 다른 글
모듈(다른 모듈 접근) (0) | 2018.02.22 |
---|---|
모듈(pub) (0) | 2018.02.22 |
Enum(if let) (0) | 2018.02.21 |
Enum(match) (0) | 2018.02.21 |
Enum(Option<T>) (0) | 2018.02.21 |