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

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!

    코드 한 줄씩 동작 설명

    1. import 'dart:io';: Dart의 I/O 라이브러리를 가져옵니다.
    2. var file = File('example.txt');: 'example.txt'라는 파일을 나타내는 File 객체를 생성합니다.
    3. await file.writeAsString('Hello, Dart File I/O!');: 파일에 문자열을 작성합니다. 이 과정은 비동기적으로 실행됩니다.
    4. String contents = await file.readAsString();: 파일에서 문자열을 읽어와 contents 변수에 저장합니다.
    5. print(contents);: 파일에서 읽어온 내용을 콘솔에 출력합니다.
    6. 4. 실전 활용 예제

    7. 쇼핑몰 장바구니 구현
    8.    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);
         }

      - 이 코드는 쇼핑몰 장바구니에 상품을 추가하고, 장바구니의 내용을 출력합니다.

    9. 로그 파일 생성
    10.    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. 흔한 실수와 주의사항

    11. 파일 경로 오류
    12. - 잘못된 파일 경로를 사용하면 파일을 찾지 못하는 오류가 발생합니다.

         // 잘못된 예
         var file = File('invalid_path/example.txt'); // FileNotFoundException
    13. 파일 닫지 않기
    14. - Dart의 경우, 파일을 명시적으로 닫을 필요는 없지만, 리소스를 적절하게 관리하는 것이 중요합니다. 너무 많은 파일을 열어두면 메모리 문제를 초래할 수 있습니다.

         // 올바른 예: 사용 후 파일 객체 삭제
         file = null; // 가비지 컬렉션을 유도함

      6. 정리

    15. 파일 I/O는 데이터 영속성을 유지하는 데 필수적입니다.
    16. 파일 열기, 읽기, 쓰기, 닫기와 같은 기본 개념을 이해해야 합니다.
    17. 실무에서는 파일 I/O를 통해 다양한 데이터를 저장하고 관리합니다.
    18. 다음에 학습하면 좋은 주제는 비동기 프로그래밍 및 JSON 파일 처리입니다.