만자의 개발일지

[Rust] 함수와 표현식 본문

Rust

[Rust] 함수와 표현식

박만자 2025. 4. 29. 22:24

함수(Functions)

함수는 특정 동작을 수행하기 위한 코드의 집합 입니다. Rust에서 함수는 필수 불가결한 존재입니다.

Rust에서 프로그램을 실행시키기 위한 시작점인 main 역시 함수입니다.

Rust에서는 fn 키워드를 통해 함수를 선언할 수 있습니다. 

fn main() {
  example_function();
}

fn example_function() {
  println!("This is an example function");
}

함수를 선언할 때 위치는 중요하지 않습니다. 함수를 호출하는 부분에서 볼 수 있는 스코프 내에 정의만 되어있으면 됩니다.

매개변수(Parameters)와 인수(Arguments)

매개변수는 함수에 전달되는 값을을 내부에서 사용하기 위해 사용되는 변수를 말하며, 인수는 함수를 호출할 때 함수 내부로 전달되는 값을 말합니다.

함수 선언 부문에서 매개변수를 정의하면, 호출 부문에서 함수 내부로 값(인수)을 전달할 수 있습니다.

매개변수의 타입은 콜론(:)을 사용하여 지정할 수 있습니다.

fn main() {
  example_function(10); // argument
}

fn example_function(x: i32) { // parameter
  println!("The value of x is: {}", x);
}

함수 호출 부분에서 인수 값으로 10을 넘겨주었고 이를 매개변수 x 로 받아서 함수 내부에서 사용할  수 있는 것을 보실 수 있습니다.

표현식(Expressions)과 구문(Statements)

Rust는 기본적으로 표현식 언어입니다. 때문에 표현식에 대해 확실히 알고 넘어가야할 필요가 있습니다.

Rust에서 작성하는 모든 코드는 구문과 표현식으로 구성되어있습니다.

  • 표현식평가(evalutate)한 값을 반환하는 코드입니다.
  • 구문 어떤 동작을 수행하는 코드이며, 값을 반환하지 않습니다. 
fn main() {
  let x = 5 + 3;
}

위 코드에서 let x = 5 + 3; 구문이고, 5 + 3 은 평가된 값인 8을 반환하는 표현식 입니다. 표현식이 구문안에 포함되어있는 코드입니다.

5 + 3 자체는 값을 반환하지만 let 자체는 어떠한 값도 반환하지 않고 단지 값을 변수에 바인딩 해주는 동작만 수행하기 때문에 구문입니다. 따라서 let, fn, struct, ... 같은 키워드를 사용하여 Item을 선언하는 코드들은 모두 구문입니다.

 

다음 코드는 에러를 반환합니다.

fn main() {
  let y = (let x = 5 + 3);
}

구문을 변수에 바인딩하려고 시도하기 때문에 발생하는 에러입니다. 구문어떠한 값도 반환하지 않기 때문에 변수에 바인딩 할 수 없습니다.

 

블록({ })도 표현식입니다. 블록 내부에서 마지막 줄에 표현식을 작성하면 해당 표현식의 평가된 값을 반환합니다.

fn main() {
  let y = {
    let a = 2;
    a + 1
  };
}

여기서 주의할 점은 a + 1 뒤에 세미콜론(;)이 붙으면 안된다는 점입니다.

표현식에 세미콜론이 붙는 순간 표현식은 구문으로 변경되고 값을 반환하지 않게 됩니다.

블록 마지막 줄이 구문인 경우 해당 블록은 기본 타입중 하나인 () 값(unit type)을 반환하게 됩니다. 

값을 반환하는 함수(Funtions with Return Values)

함수에서는 return 키워드를 사용하여 표현식 값을 반환할 수 있습니다.

값을 반환하는 함수를 선언할 때는 반드시 반환 타입을 명시해주어야 합니다.

함수의 반환 타입은 (->) 뒤에 선언할 수 있습니다. 

fn main() {
  println!("{}", example_function(1)); // 2
}

fn example_function(x: i32) -> i32{
  
  if x == 5 {
    return x + 5;
  }
  
  x + 1
}

Rust에서는 함수 내부의 마지막 표현식에 return 키워드를 생략할 수 있습니다. 이를 tail expression 혹은 암묵적 반환(implicit return)이라고 합니다.

return 키워드 자체도 값을 반환하기 때문에 표현식입니다.

세미콜론이 붙어서 구문이라고 생각하실 수도 있지만, return 키워드는 값을 반환하고 함수를 즉시 종료 시키기 때문에 뒤에 세미콜론이 붙어도 실행되지 않습니다.

보통 코드 가독성을 위해 붙이는 경우가 많습니다.

 

함수 호출도 표현식입니다. 함수가 호출됨으로써 표현식 값을 반환하기 때문입니다.

하지만 모든 함수가 표현식 값을 반환하진 않습니다. 반환 값이 없는 함수는 () 값을 반환합니다.

fn main() {
  println!("{:?}", example_function(1)); // () 출력
}

fn example_function(x: i32) {
  println!("The value of x is: {}", x);
}

이는 블록도 마찬가지 입니다.

 

앞서 설명했듯이 표현식은 값을 반환하는 코드입니다.

블록과 함수의 내부에서 표현식 값을 반환하지 않아도 그것은 결과값이 ()인 표현식일 뿐입니다.

 

이외에도 Rust에는 다양한 종류의 표현식이 있습니다. Rust의 다양한 표현식들은 아래 공식문서를 통해 확인하실 수 있습니다.

 

Expressions - The Rust Reference

Syntax Expression :       ExpressionWithoutBlock    | ExpressionWithBlock ExpressionWithoutBlock :    OuterAttribute*†    (          LiteralExpression       | PathExpression       | OperatorExpression       | GroupedExpression

doc.rust-lang.org


이번 포스팅에서는 함수화 표현식에 대해 알아보았습니다. 다음 포스팅에서는 조건문과 반복문에 대해 알아보도록 하겠습니다.

 

참고

'Rust' 카테고리의 다른 글

[Rust] 열거형  (0) 2025.05.18
[Rust] 구조체와 메서드 & 연관 함수  (0) 2025.05.04
[Rust] 조건문과 반복문  (0) 2025.05.02
[Rust] 변수와 타입  (0) 2025.04.28
Comments