학습
Dart 모듈 시스템
Dart 모듈 시스템 — 중급
모듈 시스템
1. 도입 (왜 배워야 하는가)
Dart의 모듈 시스템은 코드의 구조화와 재사용성을 극대화하는 데 필수적입니다. 실무에서는 대규모 애플리케이션을 개발할 때 코드가 복잡해지기 마련인데, 이때 모듈 시스템을 통해 기능을 나누고 관리하면 코드의 유지보수와 협업이 훨씬 쉬워집니다. 모듈 시스템이 없다면 모든 코드가 하나의 파일에 몰리게 되어, 디버깅이나 기능 추가 시 어려움을 겪게 됩니다.
예를 들어, 쇼핑몰 애플리케이션을 개발 중이라면 상품 관리, 사용자 관리, 주문 처리가 각각의 모듈로 분리되어 있어야 합니다. 이렇게 하면 각 팀원이 독립적으로 작업할 수 있고, 나중에 코드 통합 시 충돌을 줄일 수 있습니다.
2. 핵심 개념 설명
모듈 시스템의 핵심 개념은 다음과 같습니다:
| 용어 | 설명 |
|---|---|
| 라이브러리 | 재사용 가능한 코드 집합 |
| 패키지 | 라이브러리의 집합, Dart에서 관리되는 단위 |
| 임포트 | 다른 모듈의 기능을 현재 모듈에서 사용하기 위한 방법 |
비유
모듈 시스템을 집의 방에 비유하자면, 각 방은 특정 기능을 가진 공간입니다. 거실은 손님을 맞이하는 곳, 주방은 요리를 하는 곳처럼 각 방이 분리되어 있어야 집안일이 효율적입니다. 마찬가지로, 모듈 시스템은 각 기능을 분리해 효율적으로 관리하게 돕습니다.
3. 기본 코드 예제
Dart에서 모듈을 사용하는 가장 기본적인 방법을 살펴보겠습니다. 두 개의 파일을 만들어 보겠습니다.
math_utils.dart: 수학 관련 함수 모듈main.dart: 메인 파일- 실행 결과
- 코드 설명
cart.dart: 장바구니 모듈main.dart: 메인 파일- 실행 결과
- 상황 설명
auth.dart: 인증 모듈main.dart: 메인 파일- 실행 결과
- 상황 설명
- 잘못된 코드:
- 올바른 코드:
- 잘못된 코드:
- 올바른 코드:
- 모듈 시스템은 코드의 구조화와 재사용성을 높여줍니다.
- Dart에서는 라이브러리와 패키지를 통해 모듈을 관리합니다.
import문을 사용하여 다른 모듈의 기능을 활용할 수 있습니다.- 다음에 학습하면 좋은 주제로는 "Dart에서의 비동기 프로그래밍"을 추천합니다. 비동기 프로그래밍은 모듈과 함께 사용될 때 더욱 강력한 효과를 발휘합니다.
// math_utils.dart
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
// 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
class Cart {
List<int> items = []; // 장바구니에 담긴 상품 리스트
void addItem(int item) {
items.add(item); // 상품 추가
}
int getTotal() {
return items.reduce((a, b) => a + b); // 총합 계산
}
}
// 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
class Auth {
bool isLoggedIn = false;
void login() {
isLoggedIn = true; // 로그인 상태 변경
}
void logout() {
isLoggedIn = false; // 로그아웃 상태 변경
}
}
// 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); // 올바른 함수 이름