타나기
타나기 월드
타나기
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • ⚙️ Rust (20)
      • 👀 Tutorial (20)
    • 🗿 Embedded (11)
      • 🐧 OS for ARM (11)
    • 💻 Study (37)
      • 🧩 알고리즘 (37)
    • 🏄🏽‍♂️ Life (21)
      • 🍚 타나구루망 (20)
      • 💡 Light (1)

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타나기

타나기 월드

⚙️ Rust/👀 Tutorial

[Rust / 튜토리얼] 19. 러스트의 use. super의 사용

2022. 6. 22. 21:30

모듈 가져오기

대부분의 사람들은 별명을 하나즈음 가지고 있을 것이다. 나는 낙타라는 별명을 고등학생때부터 가지게 되어 10년이 훌쩍 넘게 낙타로 불리우고 있다. 가끔은 내이름이 그립긴 하지만 좋은 점이 몇개 있는데, 첫째로 부르기 쉽다는 것이고 둘째로는 기억하기 쉽다는 것이다. 러스트는 모듈을 사용하기 쉽게 하기 위해 네이밍룰을 제공하고 있다. 아래와 같은 코드가 있다고 생각해 보자.

pub mod a {
    pub mod series {
        pub mod of {
            pub fn nested_modules() {}
        }
    }
}

fn main() {
    a::series::of::nested_modules();
}

저 하나의 메소드를 호출하기 위해 대체 몇 단계의 (nested된) 모듈을 타고 들어가야 하는지 현기증이 난다. 귀찮은걸 너무나 싫어하는 프로그래머들은 이걸 참지 못하고 use를 만들어 냈다. 이 use를 사용하면 저 길다리 긴 구문을 짧게 줄일 수 있다.

use를 이용해 간편하게 가져오기

pub mod a {
    pub mod series {
        pub mod of {
            pub fn nested_modules() {}
        }
    }
}

use a::series::of;

fn main() {
    of::nested_modules();
}

use를 이용해 쉽고 간편하게 메소드를 호출할 수 있게 되었다. 여기서 중요한 점은 use의 맨 끝에 언급된 모듈만 가져온다는 점이다. a 나 series 모듈은 사용할 수 없다. 그럼 use는 모듈만 가져올 수 있나? 당연히 아니다. 아래의 예시처럼 메소드도 가져올 수 있다.

pub mod a {
    pub mod series {
        pub mod of {
            pub fn nested_modules() {}
        }
    }
}

use a::series::of::nested_modules;

fn main() {
    nested_modules();
}

혹은 c언어의 enum을 사용한 것처럼 variant를 사용할 수 있게 만들 수도 있다. 물론 use로 가져오지 않은 variant는 사용할 수 없다.

enum TrafficLight {
    Red,
    Yellow,
    Green,
}

use TrafficLight::{Red, Yellow};

fn main() {
    let red = Red;
    let yellow = Yellow;
    let green = TrafficLight::Green;
}

*을 사용해 싸그리 몽땅 긁어오기

*는 컴퓨터언어에서 전부 를 의미한다. 귀찮을 때 *를 사용하면 하나하나 타이핑 하지 않고 전부 처리할 수 있다. rm -rf * 의 리눅스 명령어처럼 현재 폴더의 모든 데이터를 지울 때를 떠올려 보면 된다. 위에서 우리는 Green을 가져오지 않아서 사용하지 못했다. 여기서 *를 사용해 모든 값들을 가져와 보자.

enum TrafficLight {
    Red,
    Yellow,
    Green,
}

use TrafficLight::*;

fn main() {
    let red = Red;
    let yellow = Yellow;
    let green = Green;
}

Red, Yellow, Green 모두 잘 가져와 지는 것을 확인할 수 있다!

super를 이용해 부모 모듈에 접근하기

편할것만 같았던 use에도 단점이 있었으니 ... 바로 현재 작업중인 경로에서부터 모듈을 가져온다는 점이다. 작업중인 파일보다 상위 폴더의 모듈을 가져오는 경우도 있을텐데, 이럴 경우 :: 혹은 super를 사용하면 된다. ::는 프로젝트의 루트를 의미하고 super는 한단계 상위 폴더에서 가져온다는 의미이다. 리눅스로 치면 /, ../를 의미한다고 보면 될 것같다.

정리

이제 모듈을 자유 자재로 선언하고 가져올 수 있게 되었다. 다음으로는 표준 라이브러리의 몇가지 컬렉션 데이터 구조를 살펴 보도록 하자.

저작자표시 (새창열림)

'⚙️ Rust > 👀 Tutorial' 카테고리의 다른 글

[Rust / 튜토리얼] 20. 러스트에서 벡터 (vector) 사용하기  (0) 2022.06.27
[Rust / 튜토리얼] 18. 러스트의 public 과 private  (0) 2022.06.15
[Rust / 튜토리얼] 17. 러스트의 모듈 (mod)  (0) 2022.06.13
[Rust / 튜토리얼] 16. 러스트의 let if 의 사용법  (0) 2022.06.08
[Rust / 튜토리얼] 15. 러스트에서 match 를 이용한 분기.  (0) 2022.06.06
    '⚙️ Rust/👀 Tutorial' 카테고리의 다른 글
    • [Rust / 튜토리얼] 20. 러스트에서 벡터 (vector) 사용하기
    • [Rust / 튜토리얼] 18. 러스트의 public 과 private
    • [Rust / 튜토리얼] 17. 러스트의 모듈 (mod)
    • [Rust / 튜토리얼] 16. 러스트의 let if 의 사용법
    타나기
    타나기
    #include<all>

    티스토리툴바