[Rust] 함수 사용법: 정의, 호출, 고급 예제까지

[Rust] 함수 사용법: 정의, 호출, 고급 예제까지

Rust/Concepts
민호이 민호이 2025. 1. 9. 19:16
목차
  1. 1. Rust 함수의 기본 개념
  2. 함수 정의와 구조
  3. 함수 호출 예제
  4. 2. Rust 함수의 주요 특징
  5. 2.1 반환값과 세미콜론
  6. 2.2 매개변수
  7. 3. Rust 함수의 고급 활용
  8. 3.1 가변 매개변수
  9. 3.2 클로저
  10. 3.3 재귀 함수
  11. 4. Rust 함수와 Ownership
  12. 4.1 소유권 이동
  13. 4.2 참조와 빌림
  14. 5. 자주 묻는 질문 (F&Q)
  15. Q1. Rust 함수에서 기본값을 설정할 수 있나요?
  16. Q2. Rust에서 함수 오버로딩이 가능한가요?
  17. 6. 최적화를 위한 팁

Rust는 메모리 안정성과 성능을 강조하는 시스템 프로그래밍 언어로, 함수는 Rust의 필수 구성 요소입니다. 본 글에서는 Rust 함수의 정의, 사용법, 그리고 고급 활용 방법에 대해 자세히 알아봅니다. 함수는 Rust뿐만 아니라 타 프로그래밍에서도 매우 중요한 주제입니다. 타 프로그래밍 경험이 많다면 Rust에서의 함수 역시 어렵지 않게 익힐 수 있을 것입니다.


1. Rust 함수의 기본 개념

함수 정의와 구조

Rust에서 함수는 프로그램의 구성 요소로, 코드를 구조화하고 재사용성을 높이는 데 핵심적인 역할을 합니다. Rust 함수는 fn 키워드** 로 정의되며, 아래와 같은 기본 구조를 가집니다.

fn 함수이름(매개변수: 타입) -> 반환타입 {
// 함수 본문
반환값
}
  • fn: 함수 정의를 위한 키워드.
  • 함수이름: 함수의 이름. 관례적으로 소문자와 밑줄(_)을 사용.
  • 매개변수: 타입: 함수로 전달되는 값과 그 데이터 타입.
  • -> 반환타입: 함수가 반환하는 값의 타입(생략 가능).

함수 호출 예제

fn add(a: i32, b: i32) -> i32 {
a + b
}
fn main() {
let sum = add(5, 3);
println!("합계는: {}", sum);
}

2. Rust 함수의 주요 특징

2.1 반환값과 세미콜론

Rust에서는 함수의 마지막 표현식이 반환값이 됩니다. 세미콜론(;)이 없으면 해당 값이 반환됩니다.

fn square(x: i32) -> i32 {
x * x // 세미콜론 없음: 반환값
}

2.2 매개변수

함수는 고정된 타입의 매개변수를 받습니다.

fn greet(name: &str) {
println!("안녕하세요, {}!", name);
}

3. Rust 함수의 고급 활용

3.1 가변 매개변수

매개변수를 수정하려면 mut 키워드를 사용합니다:

fn increment(mut num: i32) -> i32 {
num += 1;
num
}

3.2 클로저

Rust의 클로저는 익명 함수로, 주변 스코프의 변수를 캡처할 수 있습니다.

fn main() {
let multiplier = 2;
let multiply = |x: i32| x * multiplier;
println!("3 * 2 = {}", multiply(3));
}

3.3 재귀 함수

Rust는 재귀를 지원합니다. 하지만 스택 오버플로우를 방지하기 위해 주의가 필요합니다.

fn factorial(n: u32) -> u32 {
if n == 0 { 1 } else { n * factorial(n - 1) }
}

4. Rust 함수와 Ownership

4.1 소유권 이동

함수는 매개변수를 받을 때 소유권을 이동시킬 수 있습니다.

fn takes_ownership(s: String) {
println!("{}", s);
}
fn main() {
let my_string = String::from("Rust");
takes_ownership(my_string);
// my_string은 더 이상 사용 불가
}

4.2 참조와 빌림

소유권을 유지하면서 데이터를 함수에 전달하려면 참조를 사용합니다.

fn print_length(s: &String) {
println!("길이: {}", s.len());
}
fn main() {
let s = String::from("안녕하세요");
print_length(&s);
}

5. 자주 묻는 질문 (F&Q)

Q1. Rust 함수에서 기본값을 설정할 수 있나요?

아니요. Rust 함수는 기본 매개변수값을 지원하지 않습니다. 이를 해결하려면 Option 또는 함수 오버로딩을 사용하세요.

fn greet(name: Option<&str>) {
match name {
Some(n) => println!("안녕하세요, {}!", n),
None => println!("안녕하세요!"),
}
}

Q2. Rust에서 함수 오버로딩이 가능한가요?

Rust는 함수 오버로딩을 지원하지 않습니다. 대신, 제네릭(Generic)이나 트레이트(Trait)를 활용할 수 있습니다.


6. 최적화를 위한 팁

  1. inline 속성 사용 : 짧고 자주 호출되는 함수는 컴파일러 최적화를 위해 #[inline] 속성을 사용할 수 있습니다.
  2. 재사용성 극대화 : 클로저와 제네릭을 활용해 중복을 줄이세요.
  3. 코드 읽기 쉬움 : 주석과 적절한 함수 이름을 사용하세요.
저작자표시 (새창열림)
  1. 1. Rust 함수의 기본 개념
  2. 함수 정의와 구조
  3. 함수 호출 예제
  4. 2. Rust 함수의 주요 특징
  5. 2.1 반환값과 세미콜론
  6. 2.2 매개변수
  7. 3. Rust 함수의 고급 활용
  8. 3.1 가변 매개변수
  9. 3.2 클로저
  10. 3.3 재귀 함수
  11. 4. Rust 함수와 Ownership
  12. 4.1 소유권 이동
  13. 4.2 참조와 빌림
  14. 5. 자주 묻는 질문 (F&Q)
  15. Q1. Rust 함수에서 기본값을 설정할 수 있나요?
  16. Q2. Rust에서 함수 오버로딩이 가능한가요?
  17. 6. 최적화를 위한 팁
'Rust/Concepts' 카테고리의 다른 글
  • [Rust] 소유권(Ownership) 완벽 가이드: 개념부터 예제까지
  • [Rust] 제어 흐름(Control Flow): 조건문과 반복문 활용 가이드
  • [Rust] 데이터 타입 정리: 기본부터 고급까지 한눈에
  • [Rust] 가변성 이해하기: Mutability 활용법 완벽 정리
민호이
민호이
민호이
ChungCODE
민호이
전체
오늘
어제
  • Categories (128)
    • 스포츠 (6)
    • 인공지능 (5)
    • 주식 (6)
      • 경제 주식 전망 (5)
      • ETF (9)
    • CSAPP (4)
      • Lab Session (4)
      • Concepts (0)
    • C (19)
    • Java (24)
    • Rust (44)
      • Concepts (27)
      • Libraries (17)
    • PS (2)
    • 국내 소식 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 최대공약수
  • 유클리드 호제법
  • 최소공배수
  • C
  • 수학
  • c++
  • 알고리즘
  • 코드업

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.v4.2.1
민호이
[Rust] 함수 사용법: 정의, 호출, 고급 예제까지
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.