kakasoo

3. 러스트 매크로 본문

프로그래밍/Rust

3. 러스트 매크로

카카수(kakasoo) 2024. 3. 24. 21:18
반응형
// main.rs
fn main() {
	println!("Hello, world!");
}

함수의 호출은 위와 같이 작성해서, 다른 프로그래밍 언어와 다르지 않다.

앞서 ‘println!’을 따로 설명하지 않고 넘어갔는데 이는 함수가 아니라 러스트에서는 매크로라고 부르는 대상이다.

매크로는 메타 프로그래밍의 줄임말로 더 많은 코드를 작성하는 코드 작성의 한 가지 방법이라고 한다.

함수 시그니처는 이 함수가 받는 매개변수와 타입 ( = 데이터 유형 )을 반드시 명시해야 하는데,

매크로는 매번 다른 개수의 매개변수와 타입을 받을 수 있도록 작성하는 것이다.

단점은 매크로를 정의하는 게 함수보다 더 복잡하다는 점이 있지만 범용적으로 사용가능한 좋은 기능이다.

 

fn main () {
	println!("Number: {}, String: {}", 100, "abcd"); // 중괄호를 만날 때마다 뒤에서 받은 매개변수로 치환된다.
}

이런 활용은 일반적인 함수 코드에서는 사용이 불가능할 텐데,

더 많은 러스트 코드 확장을 알고 싶다면 cargo-expand를 설치하여 다루면 된다.

 

$ cargo install cargo-expand # 아직 cargo-expand를 설치하지 않았을 경우
$ cargo expand

여기서 말하는 확장 (expand) 은 매크로 코드가 실제로 어떻게 번역되는지를 의미한다.

 

#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
fn main() {
    {
        ::std::io::_print(format_args!("Number: {0}, String: {1}\\n", 100, "abcd"));
    };
}

위는 실제로 expand 명령어를 사용한 결과이다.

반응형