IMCAT.DEV
로그인 가입
Dart 중급 도구

Dart 모듈 시스템

Dart 모듈 시스템 — 중급

모듈 시스템

1. 도입 (왜 배워야 하는가)

Dart의 모듈 시스템은 코드의 구조화와 재사용성을 극대화하는 데 필수적입니다. 실무에서는 대규모 애플리케이션을 개발할 때 코드가 복잡해지기 마련인데, 이때 모듈 시스템을 통해 기능을 나누고 관리하면 코드의 유지보수와 협업이 훨씬 쉬워집니다. 모듈 시스템이 없다면 모든 코드가 하나의 파일에 몰리게 되어, 디버깅이나 기능 추가 시 어려움을 겪게 됩니다.

예를 들어, 쇼핑몰 애플리케이션을 개발 중이라면 상품 관리, 사용자 관리, 주문 처리가 각각의 모듈로 분리되어 있어야 합니다. 이렇게 하면 각 팀원이 독립적으로 작업할 수 있고, 나중에 코드 통합 시 충돌을 줄일 수 있습니다.

2. 핵심 개념 설명

모듈 시스템의 핵심 개념은 다음과 같습니다:

용어설명
라이브러리재사용 가능한 코드 집합
패키지라이브러리의 집합, Dart에서 관리되는 단위
임포트다른 모듈의 기능을 현재 모듈에서 사용하기 위한 방법

비유

모듈 시스템을 집의 방에 비유하자면, 각 방은 특정 기능을 가진 공간입니다. 거실은 손님을 맞이하는 곳, 주방은 요리를 하는 곳처럼 각 방이 분리되어 있어야 집안일이 효율적입니다. 마찬가지로, 모듈 시스템은 각 기능을 분리해 효율적으로 관리하게 돕습니다.

3. 기본 코드 예제

Dart에서 모듈을 사용하는 가장 기본적인 방법을 살펴보겠습니다. 두 개의 파일을 만들어 보겠습니다.

  1. math_utils.dart: 수학 관련 함수 모듈
  2. // math_utils.dart
    int add(int a, int b) {
      return a + b;
    }
    
    int subtract(int a, int b) {
      return a - b;
    }
  3. main.dart: 메인 파일
  4. // main.dart
    import 'math_utils.dart'; // math_utils.dart에서 함수를 가져옵니다.
    
    void main() {
      int sum = add(5, 3); // add 함수 호출
      int difference = subtract(5, 3); // subtract 함수 호출
    
      print('Sum: $sum'); // 합계를 출력합니다.
      print('Difference: $difference'); // 차이를 출력합니다.
    }
    • 실행 결과
    • Sum: 8
      Difference: 2
    • 코드 설명
    • - import 'math_utils.dart';: math_utils.dart 파일에서 정의된 함수를 사용할 수 있게 가져옵니다. - int sum = add(5, 3);: add 함수를 호출하여 5와 3을 더한 결과를 sum 변수에 저장합니다. - print('Sum: $sum');: 합계를 출력합니다.

      4. 실전 활용 예제

      예제 1: 쇼핑몰 장바구니 구현

      장바구니에서 상품을 추가하고 총합을 계산하는 모듈을 만들어 보겠습니다.

    • cart.dart: 장바구니 모듈
    • // cart.dart
      class Cart {
        List<int> items = []; // 장바구니에 담긴 상품 리스트
      
        void addItem(int item) {
          items.add(item); // 상품 추가
        }
      
        int getTotal() {
          return items.reduce((a, b) => a + b); // 총합 계산
        }
      }
    • main.dart: 메인 파일
    • // main.dart
      import 'cart.dart';
      
      void main() {
        Cart cart = Cart(); // Cart 객체 생성
        cart.addItem(100); // 상품 100 추가
        cart.addItem(200); // 상품 200 추가
      
        print('Total: ${cart.getTotal()}'); // 총합 출력
      }
    • 실행 결과
    • Total: 300
    • 상황 설명
    • - 사용자가 장바구니에 상품(예: 가격)이 추가될 때마다 addItem을 호출하고, getTotal로 총합을 쉽게 계산할 수 있습니다.

      예제 2: 사용자 인증 모듈

      사용자 로그인 상태를 관리하는 모듈입니다.

    • auth.dart: 인증 모듈
    • // auth.dart
      class Auth {
        bool isLoggedIn = false;
      
        void login() {
          isLoggedIn = true; // 로그인 상태 변경
        }
      
        void logout() {
          isLoggedIn = false; // 로그아웃 상태 변경
        }
      }
    • main.dart: 메인 파일
    • // main.dart
      import 'auth.dart';
      
      void main() {
        Auth auth = Auth(); // Auth 객체 생성
        auth.login(); // 로그인
        print('Is user logged in? ${auth.isLoggedIn}'); // 로그인 상태 출력
      }
    • 실행 결과
    • Is user logged in? true
    • 상황 설명
    • - 사용자가 로그인할 때 login 메서드를 호출하여 인증 상태를 관리할 수 있습니다.

      5. 흔한 실수와 주의사항

      실수 1: 파일 경로 오류

    • 잘못된 코드:
    • import 'math_utils'; // 확장자가 빠짐
    • 올바른 코드:
    • import 'math_utils.dart'; // 확장자를 포함

      실수 2: 모듈에서 함수 호출 시 오타

    • 잘못된 코드:
    • int sum = addd(5, 3); // 함수 이름에 오타
    • 올바른 코드:
    • int sum = add(5, 3); // 올바른 함수 이름

      6. 정리

    • 모듈 시스템은 코드의 구조화와 재사용성을 높여줍니다.
    • Dart에서는 라이브러리와 패키지를 통해 모듈을 관리합니다.
    • import 문을 사용하여 다른 모듈의 기능을 활용할 수 있습니다.
    • 다음에 학습하면 좋은 주제로는 "Dart에서의 비동기 프로그래밍"을 추천합니다. 비동기 프로그래밍은 모듈과 함께 사용될 때 더욱 강력한 효과를 발휘합니다.