일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 동시성
- rust
- 알고리즘
- RabbitMQ
- fluent python
- Algorithm
- 블록체인
- docker
- dockerfile
- BlockChain
- BAEKJOON
- Kubernetes
- IMAGE
- 플랫폼
- Ethereum
- Fast API
- Container
- AWS
- Thread
- 러스트
- 파이썬
- Python
- 이더리움
- 코어 이더리움 프로그래밍
- Network
- guru
- 전문가를 위한 파이썬
- Refactoring
- function
- 백준
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[7] 모듈과 파일시스템 본문
728x90
모듈
mod와 파일시스템
$ cargo new communicator --lib
$ cd communicator
이는 src/lib.rs를 생성한다.
mod client {
fn connect() {
}
}
mod network {
fn connect() {
}
mod server {
fn connect() {
}
}
}
---------------------------
communicator
├── client
└── network
└── server
이를 두 파일로 쪼갠다면 lib.rs 파일에 mod client;
이라고 선언하고 client.rs라는 파일을 만들어 그곳에 모듈을 정의하면 된다. 이처럼 작성했을 때 러스트는 lib.rs에서 client 모듈을 선언하고 있지만 코드블록을 세미콜론으로 대체함으로 러스트 컴파일러가 client 모듈을 다른 위치에서 찾으라는 것이다.
mod client {
// contents of client.rs
}
mod client;는 블록 내용은 client.rs에 있음을 뜻하기 때문에 client.rs라는 파일을 만들어 그 내부에 함수들을 작성해야 한다.
이 파일은 client 모듈의 내용물만 제공할 뿐으로, mod client를 재정의하면 client 모듈 내에 하위 모듈을 만드는 셈이 된다.
파일 시스템 규칙
- 만일 foo라는 이름의 모듈이 서브모듈을 가지고 있지 않다면, foo.rs라는 이름의 파일 내에 foo에 대한 선언을 집어넣어야 한다.
- 만일 foo가 서브모듈을 가지고 있다면, foo/mod.rs라는 이름의 파일에 foo에 대한 선언을 집어넣어야 한다.
이 규칙들은 재귀적으로 적용되므로, foo라는 이름의 모듈이 bar라는 이름의 서브모듈을 갖고 있고 `bar는 서브모듈이 없다면, 여러분의 src 디렉토리 안에는 아래와 같은 파일들이 있어야 합니다
├── foo
│ ├── bar.rs (contains the declarations in `foo::bar`)
│ └── mod.rs (contains the declarations in `foo`, including `mod bar`)
가시성 제어하기
extern crate communicator;
fn main() {
communicator::client::connect();
}
communicator 라이브러리 크레이트를 가져오기 위해 extern crate
명령어를 사용한다.
러스트의 모든 코드의 기본 상태는 private이다.
비공개 규칙
- 만일 어떤 아이템이 공개라면, 이는 부모 모듈의 어디에서건 접근 가능하다.
- 만일 어떤 아이템이 비공개라면, 같은 파일 내에 있는 부모 모듈 및 이 부모의 자식 모듈에서만 접근 가능하다.
use 사용하기
pub mod a {
pub mod series {
pub mod of {
pub fn nested_modules() {}
}
}
}
enum TrafficLight {
Red,
Yellow,
Green,
}
use a::series::of;
use TrafficLight::{Red, Yellow};
use TrafficLight::*; // 이와같이 glob하게 가져올 수도 있음. name conflict 주의!
fn main() {
of::nested_modules();
}
728x90
'Rust' 카테고리의 다른 글
[6] 표준 라이브러리 [Option, Result, Box, Cons List, Rc<T>] (0) | 2023.03.02 |
---|---|
[5] 흐름제어 [for, loop, while ...] (0) | 2023.03.02 |
[Code] Struct & Enum 연습문제 (0) | 2023.02.23 |
[4] 구조체(Struct)와 열거형(Enum) (0) | 2023.02.23 |
[3] 라이프 타임과 참조자 유효화 (0) | 2023.02.16 |
Comments