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

Kotlin 파일 I/O

Kotlin 파일 I/O — 중급

파일 I/O

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

파일 I/O(입출력)는 프로그래밍에서 매우 중요한 개념입니다. 실무에서는 데이터 저장, 읽기, 수정 등 다양한 작업을 파일을 통해 수행합니다. 예를 들어, 애플리케이션에서 사용자 데이터를 파일에 저장하거나, 로그 파일을 통해 시스템 상태를 기록하는 등의 작업이 필요합니다. 파일 I/O를 모르고 있다면, 데이터 영속성을 확보하지 못해 프로그램이 종료되면 모든 정보가 사라지거나, 다른 시스템과의 데이터 교환이 불가능해지는 문제가 발생할 수 있습니다.

2. 핵심 개념 설명

파일 I/O는 크게 다음과 같은 두 가지 작업으로 나뉩니다:

  1. 파일 쓰기: 데이터를 파일에 저장하는 작업입니다. 이는 일종의 저장소 역할을 하며, 나중에 데이터를 사용하기 위해 필요합니다.
  2. 파일 읽기: 저장된 데이터를 파일에서 가져오는 작업입니다. 이는 프로그램이 실행 중 필요한 정보를 얻는 데 사용됩니다.
  3. 실생활 비유로는 책을 생각해볼 수 있습니다. 책에 내용을 쓰는 것은 파일 쓰기와 같고, 책을 읽는 것은 파일 읽기와 같습니다.

    관련 용어 정리

    용어설명
    Input프로그램에 데이터가 들어오는 것
    Output프로그램에서 데이터가 나가는 것
    Stream데이터의 흐름, 파일과 프로그램 간의 연결
    Buffered I/O데이터를 메모리에서 일정량 모아서 처리하는 방식

    3. 기본 코드 예제

    가장 기본적인 파일 I/O 사용법을 보여주는 코드입니다.

    import java.io.File
    
    fun main() {
        // 파일에 문자열을 쓰기
        val file = File("example.txt")
        file.writeText("안녕하세요, 파일 I/O 예제입니다.")
    
        // 파일에서 문자열을 읽기
        val content = file.readText()
        println(content) // 출력 결과: 안녕하세요, 파일 I/O 예제입니다.
    }

    실행 결과

    안녕하세요, 파일 I/O 예제입니다.

    코드 한 줄씩 동작 설명

    • import java.io.File: 파일 I/O를 위한 File 클래스를 임포트합니다.
    • val file = File("example.txt"): "example.txt"라는 이름의 파일 객체를 생성합니다.
    • file.writeText("안녕하세요, 파일 I/O 예제입니다."): 파일에 문자열을 씁니다.
    • val content = file.readText(): 파일에서 문자열을 읽어옵니다.
    • println(content): 읽어온 내용을 출력합니다.
    • 4. 실전 활용 예제

      예제 1: 로그 파일 작성

      쇼핑몰 시스템에서 사용자 활동을 기록하는 로그 파일을 작성할 수 있습니다.

      import java.io.File
      import java.time.LocalDateTime
      
      fun logUserActivity(activity: String) {
          val logFile = File("user_activity.log")
          val timestamp = LocalDateTime.now()
          logFile.appendText("[$timestamp] $activity\n")
      }
      
      fun main() {
          logUserActivity("사용자가 상품을 장바구니에 추가했습니다.")
          logUserActivity("사용자가 결제를 완료했습니다.")
      }

      예제 2: CSV 파일 읽기

      재고 관리 시스템에서 CSV 파일을 읽어 상품 정보를 처리할 수 있습니다.

      import java.io.File
      
      fun readCSV(fileName: String) {
          val file = File(fileName)
          file.forEachLine { line ->
              val items = line.split(",")
              println("상품명: ${items[0]}, 가격: ${items[1]}")
          }
      }
      
      fun main() {
          readCSV("inventory.csv") // "상품명,가격" 형식의 CSV 파일
      }

      5. 흔한 실수와 주의사항

      실수 1: 파일 경로 문제

    • 잘못된 코드:
    • val file = File("non_existent_folder/example.txt")
    • 올바른 코드:
    • val file = File("example.txt") // 현재 작업 디렉토리에 파일 생성
      주의사항: 경로가 올바르지 않으면 FileNotFoundException이 발생할 수 있습니다.

      실수 2: 파일 모드 문제

    • 잘못된 코드:
    • file.writeText("새로운 내용") // 기존 내용이 덮어씌워짐
    • 올바른 코드:
    • file.appendText("추가되는 내용") // 기존 내용 유지
      주의사항: 파일을 덮어쓰지 않으려면 appendText() 메소드를 사용해야 합니다.

      6. 정리

    • 파일 I/O는 데이터를 영속적으로 저장하고 읽어오는 기본적인 기술입니다.
    • 파일 쓰기와 읽기 두 가지 개념이 있으며, 각각 저장소와 정보 접근에 해당합니다.
    • 파일 경로와 모드를 올바르게 설정하는 것이 중요합니다.
    • 다음에 학습하면 좋은 주제: 예외 처리와 바이너리 파일 I/O.