1.2. Hello, World
이제 Rust를 설치했으니 첫 번째 Rust 프로그램을 작성할 차례입니다. 새로운 언어를 배울 때 화면에 Hello, world!
라는 텍스트를 출력하는 작은 프로그램을 작성하는 것이 일반적이므로 여기에서도 똑같이 해보겠습니다.
프로젝트 디렉터리 만들기
먼저 Rust 코드를 저장할 디렉터리를 만드는 것부터 시작하겠습니다. Rust에서는 코드가 어디에 저장되든 상관없지만, 이 책의 연습과 프로젝트를 위해 홈 디렉터리에 projects 디렉터리를 만들고 모든 프로젝트를 여기에 보관하는 것이 좋습니다.
터미널을 열고 다음 명령을 입력하여 projects 디렉터리와 projects 디렉터리 내에 "Hello, world!" 프로젝트의 디렉터리를 만듭니다.
Linux, macOS 및 Windows의 PowerShell의 경우 다음을 입력합니다:
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에 있는 코드를 입력합니다.
목록 1-1: A program that prints Hello, world!
파일을 저장하고 터미널 창으로 돌아가 ~/projects/hello_world 디렉터리로 이동합니다. Linux 또는 macOS에서는 다음 명령을 입력하여 파일을 컴파일하고 실행합니다:
Windows에서는 ./main
대신 .\main.exe
명령을 입력합니다:
운영 체제에 관계없이 Hello, world!
문자열이 터미널에 인쇄되어야 합니다. 이 출력이 표시되지 않으면 설치 섹션의 "문제 해결"' 부분을 다시 참조하여 도움을 받을 수 있는 방법을 알아보세요.
Hello, world!
가 인쇄되었다면 축하드립니다! 여러분은 공식적으로 Rust 프로그램을 작성했습니다.
Rust 프로그램 해부
이 "Hello, world!" 프로그램을 자세히 살펴봅시다. 다음은 퍼즐의 첫 번째 코드 조각입니다:
이 줄은 main
이라는 함수를 정의합니다. main
함수는 모든 실행 가능한 Rust 프로그램에서 항상 실행되는 첫 번째 코드라는 점에서 특별합니다. 여기서 첫 번째 줄은 매개변수가 없고 아무 것도 반환하지 않는 main
이라는 함수를 선언합니다. 매개변수가 있다면 ()
안에 들어갈 것입니다.
함수 본문은 {}
로 둘러싸여 있습니다. Rust에서는 모든 함수 본문 주위에 중괄호를 사용해야 합니다. 여는 중괄호를 함수 선언과 같은 줄에 배치하고 그 사이에 공백을 하나 추가하는 것이 좋은 스타일입니다.
Note
Rust 프로젝트 전체에서 표준 스타일을 고수하고 싶다면 rustfmt
라는 자동 포맷터 도구를 사용하여 코드를 특정 스타일로 포맷할 수 있습니다(부록 D에서 rustfmt
에 대해 자세히 설명합니다). Rust 팀은 이 도구를 표준 Rust 배포판에 rustc
와 마찬가지로 포함시켰으므로 컴퓨터에 이미 설치되어 있을 것입니다!
main
함수의 본문에는 다음 코드가 포함되어 있습니다:
이 줄은 이 작은 프로그램에서 텍스트를 화면에 인쇄하는 모든 작업을 수행합니다. 여기서 주목해야 할 네 가지 중요한 세부 사항이 있습니다.
첫째, Rust 스타일은 탭이 아닌 네 개의 공백으로 들여쓰기하는 것입니다.
둘째, println!
은 Rust 매크로를 호출합니다. 함수를 대신 호출했다면 !
없이 println
으로 입력되었을 것입니다. Rust 매크로에 대해서는 19장에서 더 자세히 설명하겠습니다. 지금은 !
를 사용하면 일반 함수 대신 매크로를 호출한다는 의미이며 매크로가 항상 함수와 동일한 규칙을 따르는 것은 아니라는 점만 알아두면 됩니다.
셋째, "Hello, world!"
문자열이 보입니다. 이 문자열을 println!
에 인수로 전달하면 문자열이 화면에 인쇄됩니다.
넷째, 이 표현식이 끝났고 다음 표현식을 시작할 준비가 되었음을 나타내는 세미콜론(;
)으로 줄을 끝냅니다. 대부분의 Rust 코드 줄은 세미콜론으로 끝납니다.
컴파일과 실행은 별개의 단계
방금 새로 만든 프로그램을 실행했으므로 프로세스의 각 단계를 살펴봅시다.
Rust 프로그램을 실행하기 전에 다음과 같이 rustc
명령어를 입력하고 소스 파일 이름을 전달하여 Rust 컴파일러를 사용하여 컴파일해야 합니다:
C 또는 C++에 대한 배경 지식이 있다면 gcc
또는 clang
과 비슷하다는 것을 알 수 있습니다. 컴파일이 성공적으로 완료되면 Rust는 바이너리 실행 파일을 출력합니다.
Linux, macOS 및 Windows의 PowerShell에서는 셸에 ls
명령을 입력하면 실행 파일을 볼 수 있습니다:
Linux 및 macOS에서는 두 개의 파일이 표시됩니다. Windows에서 PowerShell을 사용하면 CMD를 사용할 때와 동일한 세 개의 파일이 표시됩니다. Windows에서 CMD를 사용하면 다음을 입력합니다:
여기에는 확장자가 .rs인 소스 코드 파일, 실행 파일(Windows에서는 main.exe이지만 다른 모든 플랫폼에서는 main), Windows를 사용하는 경우 확장자가 .pdb인 디버깅 정보가 포함된 파일이 표시됩니다. 여기에서 다음과 같이 main 또는 main.exe 파일을 실행합니다:
main.rs가 "Hello, world!" 프로그램인 경우 이 줄은 터미널에 Hello, world!
를 출력합니다.
Ruby, Python, JavaScript 같은 동적 언어에 더 익숙하다면 프로그램을 컴파일하고 실행하는 과정을 별도의 단계로 진행하는 것이 익숙하지 않을 수 있습니다. Rust는 미리 컴파일된(ahead-of-time comiled) 언어이므로 프로그램을 컴파일하고 실행 파일을 다른 사람에게 넘겨주면 다른 사람은 Rust가 설치되어 있지 않아도 프로그램을 실행할 수 있습니다. 다른 사람에게 .rb, .py 또는 .js 파일을 제공하려면 각각 Ruby, Python 또는 JavaScript 구현이 설치되어 있어야 합니다. 하지만 이러한 언어에서는 프로그램을 컴파일하고 실행하는 데 명령어 하나만 있으면 됩니다. 언어 설계에 있어 모든 것이 트레이드오프(trade-off) 관계입니다.
간단한 프로그램에는 rustc
로 컴파일하는 것만으로도 충분하지만 프로젝트가 커지면 모든 옵션을 관리하고 코드를 쉽게 공유할 수 있어야 합니다. 다음으로 실제 Rust 프로그램을 작성하는 데 도움이 되는 Cargo 도구를 소개합니다.