STUDY/Rust

Rust - 8. 패키지, 크레이트, 모듈

sinawi95 2024. 2. 19. 21:06
728x90

c기준으로 header 만들고 라이브러리 숨기는 그런거 하는듯. 파이썬이면 바이너리로 만들고 api 문서 작성하는 그런 느낌이려나


1. 패키지와 크레이트

 

크레이트: 라이브러리나 실행 가능한 모듈로 구성된 트리 구조입니다.

  • 컴파일 한 차례에 고려하는 가장 작은 코드 단위
  • 여러 모듈을 담을수 있음. 모듈은 크레이트와 함께 컴파일 되는 다른 파일들에 정의되어있을수 있음.
  • 바이너리일수도 있고 라이브러리 일수도 있음. 러스트에선 크레이트는 주로 라이브러리(라이브러리 크레이트)와 혼용해서 사용함.
    • 바이너리 크레이트: 커맨드 라인 프로그램이나 서버 처럼 실행 가능한 실행 파일로 컴파일할수 있는 프로그램. main 함수를 포함하고 있어야함.
      • cargo new {binary}
      • src/{binary}.rs
    • 라이브러리 크레이트: main 함수를 포함하지 않음. 실행파일 형태로 컴파일 되지 않음. 
      • cargo new --lib {library}
  • 크레이트 루트는 러스트 컴파일러가 컴파일을 시작하는 소스 파일.

패키지: 크레이트를 빌드하고, 테스트하고, 공유하는 데 사용하는 카고 기능입니다. 

  • 일련의 기능을 제공하는 하나 이상의 크레이트로 구성된 번들
  • 패키지에는 크레이트들을 빌드하는 방법이 설명된 파일이 포함되어있음 (cargo.toml)
패키지에는 여러 개의 바이너리 크레이트가 원하는 만큼 포함될 수 있지만, 라이브러리 크레이트는 하나만 넣을 수 있습니다. 패키지에는 적어도 하나 이상의 크레이트가 포함되어야 하며, 이는 라이브러리든 바이너리든 상관없습니다.
  • (머리가 안돌아가서) 이해못했다.

2. 모듈, 경로, use

모듈과 use: 구조, 스코프를 제어하고, 조직 세부 경로를 감추는 데 사용합니다. 

  • use 키워드: 특정 스코프 내에서 긴 경로의 반복을 줄임.
    • as 키워드: 별명을 지어줄수 있음(파이썬과 같음)
  • pub 키워드: 모듈을 공개로 만듦. 기본값은 비공개(private)
    • 공개할 모듈, 구조체, 필드 등등을 다 설정해줘야 사용가능함.
    • 형제 관계에 있는 경우는 비공개여도 사용할수 있음
  • mod 키워드: 모듈 선언시 사용
    • 모듈 선언시 코드를 탐색하는 위치가 정해져있음
      • mod {name} { /*inline code*/ }
      • src/{name}.rs 파일 안
      • src/{name}/mod.rs 파일 안
    • 크레이트 루트 파일이든 아니든 똑같이 사용
      • 크레이트 루트 파일 안에서 선언한 건 모듈
      • 크레이트 루트 파일이 아니면 서브 모듈

 

경로: 구조체, 함수, 모듈 등의 이름을 지정합니다.

  • 절대 경로 (absolute path): 크레이트 루트로부터 시작되는 전체 경로입니다;
    • 외부 크레이트로부터의 코드에 대해서는 해당 크레이트 이름으로 절대 경로가 시작되고 현재의 크레이트로부터의 코드에 대해서는 crate 리터럴로부터 시작됩니다.
  • 상대 경로 (relative path): 현재의 모듈을 시작점으로 하여 self, super 혹은 현재 모듈 내의 식별자를 사용합니다.
  • 어떤 경로를 사용할진 알아서 선택해야함
  • 일반적으로 선호하는 경로는 절대 경로입니다. 아이템을 정의하는 코드와 호출하는 코드는 분리되어 있을 가능성이 높기 때문입니다.
    • 파이썬에서 라이브러리 임포트할땐 절대경로로 했던 것 같긴함 from file.module.submodule import method 이런느낌

https://doc.rust-kr.org/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html

 

'STUDY > Rust' 카테고리의 다른 글

Rust - 10. 에러 처리  (0) 2024.02.26
Rust - 9. 컬렉션(vector, string, hash map)  (0) 2024.02.20
Rust - 7. 구조체, 열거형, 패턴 매칭  (1) 2024.02.17
Rust - 6. 소유권  (0) 2024.02.16
Rust - 5. 문법/함수, 주석, 제어흐름문  (0) 2024.02.15