학습
Dart 파일 I/O
Dart 파일 I/O — 중급
파일 I/O
1. 도입 (왜 배워야 하는가)
파일 입출력(I/O)은 프로그램이 외부 데이터를 읽고 쓰는 과정을 말합니다. 일상적인 애플리케이션에서는 사용자 데이터, 설정, 로그 파일 등을 다루기 때문에 파일 I/O는 필수적입니다. 예를 들어, 쇼핑몰 애플리케이션에서 장바구니 정보를 파일에 저장하거나, 게임에서 플레이어의 진행 상황을 저장할 때 파일 I/O가 필요합니다.
파일 I/O를 모르면 데이터 영속성을 유지할 수 없고, 사용자나 시스템의 데이터를 잃어버릴 위험이 커집니다. 사용자는 저장된 정보를 잃어버리면 불편을 겪고, 개발자는 신뢰성을 잃게 됩니다.
2. 핵심 개념 설명
파일 I/O의 핵심 개념은 다음과 같습니다:
- 파일 열기 (Opening a file): 파일을 읽거나 쓰기 위해 접근하는 과정입니다. 비유하자면, 집의 문을 열고 들어가는 것과 같습니다.
- 읽기 (Reading): 파일에서 데이터를 가져오는 작업입니다. 마치 책을 읽는 것처럼 필요한 정보를 얻습니다.
- 쓰기 (Writing): 메모장에 내용을 적는 것처럼 파일에 데이터를 저장하는 작업입니다.
- 파일 닫기 (Closing a file): 작업이 끝난 후 파일을 안전하게 닫는 과정입니다. 문을 닫고 집을 나가는 것과 비슷합니다.
| 용어 | 설명 |
|---|---|
| 파일 열기 | 파일을 읽거나 쓰기 위해 접근하는 것 |
| 읽기 | 파일에서 데이터를 가져오는 작업 |
| 쓰기 | 파일에 데이터를 저장하는 작업 |
| 파일 닫기 | 작업 후 파일을 안전하게 닫는 것 |
3. 기본 코드 예제
다음은 Dart에서 파일을 읽고 쓰는 가장 기본적인 예제입니다.
import 'dart:io';
void main() async {
// 파일에 데이터 쓰기
var file = File('example.txt');
await file.writeAsString('Hello, Dart File I/O!');
// 파일에서 데이터 읽기
String contents = await file.readAsString();
print(contents); // 실행 결과: Hello, Dart File I/O!
}
실행 결과
Hello, Dart File I/O!
코드 한 줄씩 동작 설명
import 'dart:io';: Dart의 I/O 라이브러리를 가져옵니다.var file = File('example.txt');: 'example.txt'라는 파일을 나타내는 File 객체를 생성합니다.await file.writeAsString('Hello, Dart File I/O!');: 파일에 문자열을 작성합니다. 이 과정은 비동기적으로 실행됩니다.String contents = await file.readAsString();: 파일에서 문자열을 읽어와contents변수에 저장합니다.print(contents);: 파일에서 읽어온 내용을 콘솔에 출력합니다.- 쇼핑몰 장바구니 구현
- 로그 파일 생성
- 파일 경로 오류
- 파일 닫지 않기
- 파일 I/O는 데이터 영속성을 유지하는 데 필수적입니다.
- 파일 열기, 읽기, 쓰기, 닫기와 같은 기본 개념을 이해해야 합니다.
- 실무에서는 파일 I/O를 통해 다양한 데이터를 저장하고 관리합니다.
- 다음에 학습하면 좋은 주제는 비동기 프로그래밍 및 JSON 파일 처리입니다.
4. 실전 활용 예제
import 'dart:io';
void main() async {
var cartFile = File('cart.txt');
// 장바구니에 상품 추가
await cartFile.writeAsString('상품1\n', mode: FileMode.append);
await cartFile.writeAsString('상품2\n', mode: FileMode.append);
// 장바구니 내용 읽기
String cartContents = await cartFile.readAsString();
print(cartContents);
}
- 이 코드는 쇼핑몰 장바구니에 상품을 추가하고, 장바구니의 내용을 출력합니다.
import 'dart:io';
void logMessage(String message) async {
var logFile = File('log.txt');
await logFile.writeAsString('$message\n', mode: FileMode.append);
}
void main() {
logMessage('사용자가 로그인했습니다.');
logMessage('상품을 장바구니에 추가했습니다.');
}
- 이 코드는 사용자 활동을 로그 파일에 기록합니다.
5. 흔한 실수와 주의사항
- 잘못된 파일 경로를 사용하면 파일을 찾지 못하는 오류가 발생합니다.
// 잘못된 예
var file = File('invalid_path/example.txt'); // FileNotFoundException
- Dart의 경우, 파일을 명시적으로 닫을 필요는 없지만, 리소스를 적절하게 관리하는 것이 중요합니다. 너무 많은 파일을 열어두면 메모리 문제를 초래할 수 있습니다.
// 올바른 예: 사용 후 파일 객체 삭제
file = null; // 가비지 컬렉션을 유도함