ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Day 5: 함수와 모듈 기초
    RUST 20일 과정 2025. 1. 6. 13:42
    Day 5: 함수와 모듈 기초

    Day 5: 함수와 모듈 기초

    1. 수업 개요

    • 주제: Rust에서 함수(fn)를 정의/호출하고, 모듈(mod)을 통해 코드를 분리/관리하는 방법을 배운다.
    • 학습 목표:
      • Rust 함수의 기본 형태(매개변수, 반환값, 문장/표현식 차이)를 이해한다.
      • mod 키워드를 이용해 모듈을 정의하고, use로 불러오는 방법을 배운다.
      • C 언어와의 함수 선언 방식 차이를 비교하고, Rust에서의 모듈 시스템을 간단히 경험한다.

    2. 이론

    함수 정의와 호출

    • 함수 정의 문법:
    • fn 함수이름(매개변수: 타입, ...) -> 반환타입 {
          // 함수 본문
          // return 키워드 사용 가능 (마지막 표현식으로 반환 가능)
      }
    • 매개변수와 반환값:
      • 매개변수 타입을 반드시 명시해야 함
      • 반환타입(-> Type)을 명시하거나, 반환이 없으면 -> ()
    • 문장(Statement) vs 표현식(Expression):
      • 문장: 어떤 동작을 수행하지만, 값을 반환하지 않는 코드(예: let x = 5;)
      • 표현식: 어떤 값을 계산해 반환하는 코드(예: 5, x + 1, 블록 { } 안 마지막 줄)
      • 예:
      • fn add(a: i32, b: i32) -> i32 {
            a + b  // 마지막 표현식 -> 반환값
        }

    모듈(mod) 기초

    • 모듈 정의:
    • mod my_module {
          pub fn hello() {
              println!("Hello from my_module!");
          }
      }
    • 모듈 사용(use):
    • fn main() {
          my_module::hello(); // 직접 호출
          // 또는
          use my_module::hello;
          hello();
      }
    • 파일/폴더 구조:
    • src
      ├── main.rs   // fn main() + mod 선언
      └── my_module.rs  // 모듈 본문

    C 언어와의 차이점

    • C에서는 함수 선언(프로토타입) + 정의가 필요할 때가 있음. Rust는 상단 선언이 없어도 컴파일러가 순서대로 찾아감.
    • 모듈과 헤더 파일(.h) 개념이 다른 방식으로 작동. Rust에서는 mod, use로 직접 코드 구조를 정의.
    • 함수 파라미터와 반환값의 타입 추론 범위가 제한적이므로, 대부분 명시적 타입 작성.

    3. 실습

    기본 함수 만들기

    fn add(a: i32, b: i32) -> i32 {
        a + b
    }
    
    fn main() {
        let result = add(3, 4);
        println!("3 + 4 = {}", result);
    }

    문장 vs 표현식 구분 연습

    let result = {
        let x = 2;
        x + 3  // 세미콜론 없음
    };
    println!("result = {}", result); // 5

    모듈 분리 실습

    • 단일 파일 내 모듈:
    • mod calculator {
          pub fn add(a: i32, b: i32) -> i32 {
              a + b
          }
      }
      
      fn main() {
          let sum = calculator::add(3, 4);
          println!("3 + 4 = {}", sum);
      }
    • 파일 분리 모듈:
    • // src/main.rs
      mod calculator;
      
      fn main() {
          let sum = calculator::add(10, 20);
          println!("10 + 20 = {}", sum);
      }
      // src/calculator.rs
      pub fn add(a: i32, b: i32) -> i32 {
          a + b
      }

    use 키워드 실습

    use calculator::{add, sub};
    
    fn main() {
        let result = add(5, 3);
        println!("5 + 3 = {}", result);
    }

    4. 마무리 및 과제

    오늘 배운 내용 정리

    • Rust 함수의 구조: 파라미터 타입, 반환 타입, 마지막 표현식
    • 문장 vs 표현식 차이, return 키워드 vs 블록 마지막 값
    • 모듈(mod) 정의, use로 모듈 함수/타입 불러오기
    • C 언어와의 함수/파일 구조 차이

    과제(실습 문제)

    1. calc 모듈을 새로 만들어서,
      • add, sub, mul, div 네 함수를 구현하고,
      • main.rs에서 네 함수를 호출해 각각의 결과를 콘솔에 출력.
    2. 모듈과 함수를 분리하여(파일 분리), use calc::add와 같이 개별 함수만 가져와 쓰는 예시 작성.
    3. 함수의 마지막 표현식이 세미콜론으로 끝나는 경우와 아닌 경우를 각각 실험해보고, 결과를 주석으로 정리하기.

    학습 팁

    • 함수 단위로 코드를 명확히 분리하면, 추후 프로젝트가 커졌을 때 테스트와 재사용성이 좋아진다.
    • Rust는 모듈 구조가 C/Java와 조금 다르므로, 작은 예시부터 차근차근 구조를 나눠보자.
    • Git/GitHub를 사용 중이라면, 모듈 분리 전/후 버전으로 나누어 커밋해볼 것.

    5. 수업 진행 예시 타임라인 (총 50분 수업 기준)

    • (10분) 이론: 함수 정의/반환, 문장 vs 표현식, 모듈 개념 및 mod/use 키워드
    • (5분) 질의응답: C 언어와의 비교, 함수 프로토타입 없는 Rust의 특징
    • (20분) 실습:
      • 간단한 함수(add, sub 등) 작성 및 호출
      • 모듈 분리, use 키워드를 사용한 코드 구조화
    • (10분) 실습 코드 공유 & 디버깅
    • (5분) 마무리, 과제 안내

    정리

    함수와 모듈은 Rust 프로젝트를 체계적으로 구성하는 기본 요소입니다.

    • 함수에서는 특히 표현식을 통한 반환이 낯설 수 있지만, 익숙해지면 코드가 간결해집니다.
    • 모듈 시스템은 Rust 프로젝트 규모가 커질수록 큰 힘을 발휘하므로,
    • 작은 실습을 통해 파일 분리, 모듈 간 의존 관계, 공개 범위(pub) 등을 차근차근 익혀두는 것이 좋습니다.

    이제 Rust 기본 문법과 함께, 조금 더 큰 스케일의 코드 구조화가 가능해졌습니다.
    다음에는 구조체나 열거형 등을 배우며, 실제로 구조화된 데이터와 함께 작동하는 함수를 다뤄볼 예정입니다!

Designed by Tistory.