Rust, 쉽게 하자!

Rust 입문

[Rust] 함수

바로크냥 2022. 10. 5. 03:12

1. 함수

Rust의 함수 선언 키워드는 ‘fn’입니다. 

기본 형식은 다음과 같습니다.

 

fn 함수명(파라미터 : 파라미터 타입) -> 반환타입{
...
}

 

fn 함수명(파라미터 : 파라미터 타입) -> 반환타입” 부분을 함수의 시그니처라고 합니다.

그 뒤의 {…} 부분은 함수의 몸체 (body)라고 합니다.

 

i32 타입의 정수를 파라미터로 받아서 10을 더해 반환하는 간단한 함수를 만들어 보겠습니다. 이름은 ‘add10’이라고 하겠습니다.

 

fn main() {
  let mut x = add10(5);    // 5를 파라미터 값으로 함수 호출
    println!("{}", x);
}

// 함수 선언
fn add10(n:i32)->i32{
    return n + 10;
}

// 출력
15

 

만약 반환값이 없다면 ‘->’ 부분을 생략하면 됩니다. 또는 ‘-> ()’을 사용해도 됩니다. 원래 ( )은 튜플을 표현 하는 기호입니다. 그래서 ( )은 빈 튜플을 의미 합니다. 하지만 반환값이 없음을 나타내기 위해서도 사용 됩니다. 빈 튜플 ( )을 유닛(unit)이라고 부르기도 합니다.  

위에서 사용한 코드에 함수 하나를 추가해 보겠습니다.

show_this는 단순하게 String을 출력하는 함수입니다. 

 

fn main() {
  let mut x = add10(5);
  show_this(x.to_string());          // 1
}
// 10을 더하는 함수
fn add10(n:i32)->i32{
    return n + 10;
}
/// 문자엻을 출력하는 함수
fn show_this(s:String){
    println!("{}",s);
}

// 1: add10 함수의 반환 타입이 i32이고 show_this 함수의 파라미터는 string 타입이기 때문에 변수 x를 to_string() 메소드로 변환 시켜 주었습니다. to_string 메소드는 String 타입으로 변환 시켜 주는 메소드 입니다.

 

add10 함수를 정의한 것을 다시 보겠습니다. 반환값이 있기 때문에 무엇을 반환할지 선언하는 부분이 있습니다. ‘return’ 키워드 뒤 부분입니다.

그런데 Rust에서는 함수 선언 부의 가장 마지막 줄을 자동으로 반환값으로 간주합니다. 그래서 ‘return’ 구문이 굳이 필요 하지 않습니다.

다만 마지막줄을 반환값으로 사용할 때는 “;”을 붙이지 않습니다.

다음 코드에서 여러 가지 반환값 스타일을 살펴 보겠습니다.

 

/// 10을 더하는 함수
fn add10(n: i32) -> i32 {
    return n + 10;            // return 사용
}
/// 5를 더하는 함수
fn add5(n:i32) ->i32{
    n + 5                    // 마지막줄 반환
}
/// 15를 더하는 함수
fn add15(n:i32) ->i32{
    return n + 15            // return 사용, ";" 없음
}
/// 문자열을 출력하는 함수
fn show_this(s: String) {
    println!("{}", s);           // 반환값 없음
}

fn main() {
    let mut x = add10(5);
    show_this(x.to_string());
    let mut x = add5(5);
    show_this(x.to_string());
    let mut x = add15(5);
    show_this(x.to_string());
}

// 출력
15
10
20

 

새로 만든 add5, add15 함수의 선언부를 보면 add10 함수와는 조금씩 다릅니다.

다시 강조하지만, 선언부의 가장 마지막 줄이 반환값이 됩니다. 가장 마지막 줄을 반환값으로 사용 할 때는 ‘;’을 사용하면 안됩니다. 만약 사용하면 반환값이 없다는 에러가 납니다. 

가장 마지막 줄에 return 문을 사용할 때는 ‘;’을 넣어도 되고 안 넣어도 됩니다. 가장 마지막 줄이고  ‘;’이 없다면, ‘return’ 키워드가 없더라도, 반환 값이라고 인식하기 때문입니다. 

 

 
반응형

'Rust 입문' 카테고리의 다른 글

[Rust] Struct  (0) 2022.10.05
[Rust] Closure  (0) 2022.10.05
[Rust] match  (0) 2022.10.02
[Rust] For  (0) 2022.10.02
[Rust] While  (0) 2022.10.02