Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hello, World!

이제 Rust를 설치했으니 첫 번째 Rust 프로그램을 작성해 볼 차례입니다. 새로운 언어를 배울 때는 화면에 Hello, world! 라는 문구를 출력하는 작은 프로그램을 작성하는 것이 전통이므로, 여기서도 같은 방식으로 시작하겠습니다!

Note: 이 책은 독자가 명령줄에 기본적으로 익숙하다고 가정합니다. 러스트는 어떤 편집기나 도구를 써야 하는지, 코드가 어디에 있어야 하는지에 대해 특별한 요구를 하지 않습니다. 따라서 명령줄 대신 IDE를 쓰고 싶다면, 좋아하는 IDE를 자유롭게 사용해도 됩니다. 요즘 많은 IDE가 어느 정도 Rust를 지원하므로, 자세한 내용은 해당 IDE 문서를 확인하세요. Rust 팀은 rust-analyzer 를 통해 훌륭한 IDE 지원을 제공하는 데 집중해 왔습니다. 자세한 내용은 부록 D 를 참고하세요.

프로젝트 디렉터리 준비

먼저 Rust 코드를 저장할 디렉터리를 만듭니다. 러스트는 코드가 어디에 있든 상관하지 않지만, 이 책의 연습문제와 프로젝트를 위해서는 홈 디렉터리 아래에 projects 디렉터리를 만들고 모든 프로젝트를 그 안에 두는 방식을 권합니다.

터미널을 열고 다음 명령으로 projects 디렉터리와, 그 안에 “Hello, world!” 프로젝트용 디렉터리를 만드세요.

Linux, macOS, Windows의 PowerShell에서는 다음을 입력합니다.

$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world

Windows CMD에서는 다음을 입력합니다.

> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world

Rust 프로그램의 기초

다음으로 새 소스 파일을 만들고 이름을 main.rs 로 지정합니다. Rust 파일은 항상 .rs 확장자로 끝납니다. 파일 이름에 단어가 두 개 이상 들어간다면, 관례상 밑줄로 단어를 구분합니다. 예를 들어 helloworld.rs 보다는 hello_world.rs 를 사용합니다.

방금 만든 main.rs 파일을 열고, 목록 1-1의 코드를 입력하세요.

Filename: main.rs
fn main() {
    println!("Hello, world!");
}
Listing 1-1: Hello, world! 를 출력하는 프로그램

파일을 저장한 뒤 ~/projects/hello_world 디렉터리에서 터미널 창으로 돌아갑니다. Linux나 macOS에서는 다음 명령으로 파일을 컴파일하고 실행합니다.

$ rustc main.rs
$ ./main
Hello, world!

Windows에서는 ./main 대신 .\main 명령을 입력합니다.

> rustc main.rs
> .\main
Hello, world!

운영체제에 상관없이 터미널에 Hello, world! 문자열이 출력되어야 합니다. 이 출력이 보이지 않는다면 설치 절의 “문제 해결” 부분으로 돌아가 도움을 받는 방법을 확인하세요.

Hello, world! 가 출력되었다면 축하합니다! 여러분은 공식적으로 첫 Rust 프로그램을 작성한 것입니다. 이제 여러분도 Rust 프로그래머입니다. 환영합니다!

Rust 프로그램의 구조

이 “Hello, world!” 프로그램을 자세히 살펴봅시다. 먼저 첫 번째 조각은 다음과 같습니다.

fn main() {

}

이 줄들은 main 이라는 이름의 함수를 정의합니다. main 함수는 특별합니다. 모든 실행 가능한 Rust 프로그램에서 가장 먼저 실행되는 코드이기 때문입니다. 여기서 첫 줄은 매개변수가 없고 아무것도 반환하지 않는 main 함수를 선언합니다. 매개변수가 있다면 괄호(()) 안에 들어갑니다.

함수 본문은 {} 로 감싸여 있습니다. 러스트는 모든 함수 본문을 중괄호로 감싸도록 요구합니다. 여는 중괄호를 함수 선언과 같은 줄에 두고, 그 앞에 공백 하나를 두는 것이 좋은 스타일입니다.

Note: 여러 Rust 프로젝트에서 표준 스타일을 유지하고 싶다면 rustfmt 라는 자동 포매터 도구를 사용해 코드를 특정 스타일로 맞출 수 있습니다(rustfmt 에 대해서는 부록 D에서 더 다룹니다). Rust 팀은 이 도구를 rustc 와 마찬가지로 표준 Rust 배포판에 포함시켰으므로, 이미 컴퓨터에 설치되어 있을 것입니다.

main 함수 본문에는 다음 코드가 들어 있습니다.

#![allow(unused)]
fn main() {
println!("Hello, world!");
}

이 한 줄이 이 작은 프로그램의 모든 일을 합니다. 화면에 텍스트를 출력하는 것입니다. 여기에는 주목할 중요한 세 가지가 있습니다.

첫째, println! 은 Rust 매크로를 호출합니다. 만약 함수였다면 println (! 없음) 형태로 적었을 것입니다. Rust 매크로는 코드를 생성하는 코드를 작성하여 Rust 문법을 확장하는 방법이며, 이에 대해서는 20장 에서 더 자세히 다룹니다. 지금은 ! 가 붙으면 일반 함수가 아니라 매크로를 호출한다는 점, 그리고 매크로는 함수와 같은 규칙만 따르지는 않는다는 점만 알면 충분합니다.

둘째, "Hello, world!" 문자열이 보입니다. 이 문자열을 println! 에 인수로 전달하면 화면에 출력됩니다.

셋째, 줄 끝에 세미콜론(;)이 있습니다. 이것은 현재 식이 끝났고 다음 식이 시작될 준비가 되었음을 뜻합니다. Rust 코드의 대부분의 줄은 세미콜론으로 끝납니다.

컴파일과 실행

방금 새로 만든 프로그램을 실행했으니, 이 과정의 각 단계를 살펴봅시다.

Rust 프로그램을 실행하기 전에, rustc 명령에 소스 파일 이름을 넘겨 Rust 컴파일러로 먼저 컴파일해야 합니다.

$ rustc main.rs

C나 C++ 배경이 있다면 이것이 gccclang 과 비슷하다는 점을 알 수 있을 것입니다. 컴파일에 성공하면 Rust는 실행 가능한 바이너리를 출력합니다.

Linux, macOS, Windows PowerShell에서는 셸에서 ls 명령을 입력해 실행 파일을 볼 수 있습니다.

$ ls
main  main.rs

Linux와 macOS에서는 두 개의 파일이 보일 것입니다. Windows의 PowerShell에서는 CMD에서 보이는 것과 같은 세 개의 파일이 보입니다. Windows CMD에서는 다음을 입력합니다.

> dir /B %= the /B option says to only show the file names =%
main.exe
main.pdb
main.rs

여기에는 .rs 확장자를 가진 소스 코드 파일, 실행 파일(Windows에서는 main.exe, 그 외 플랫폼에서는 main), 그리고 Windows를 사용할 경우 .pdb 확장자를 가진 디버깅 정보 파일이 표시됩니다. 이제 main 또는 main.exe 파일을 다음과 같이 실행합니다.

$ ./main # or .\main on Windows

여러분의 main.rs 가 “Hello, world!” 프로그램이라면, 이 줄은 터미널에 Hello, world! 를 출력합니다.

Ruby, Python, JavaScript 같은 동적 언어에 더 익숙하다면, 프로그램을 컴파일하는 단계와 실행하는 단계를 따로 나누는 것이 낯설 수 있습니다. 러스트는 ahead-of-time compiled 언어입니다. 즉, 프로그램을 컴파일한 뒤 생성된 실행 파일을 다른 사람에게 전달하면, 그 사람은 Rust가 설치되어 있지 않아도 실행할 수 있습니다. 반면 .rb, .py, .js 파일을 누군가에게 주면, 그 사람은 각각 Ruby, Python, JavaScript 구현체를 설치하고 있어야 합니다. 대신 그런 언어에서는 프로그램을 컴파일하고 실행하는 데 명령 하나면 충분합니다. 언어 설계에는 언제나 절충이 따릅니다.

단순한 프로그램은 rustc 로 컴파일하는 것만으로도 충분하지만, 프로젝트가 커질수록 여러 옵션을 관리하고 코드를 쉽게 공유할 방법이 필요해집니다. 다음 절에서는 실제 현실의 Rust 프로그램을 작성할 때 큰 도움이 되는 Cargo 도구를 소개하겠습니다.