학습
Kotlin 파일 I/O
Kotlin 파일 I/O — 중급
파일 I/O
1. 도입 (왜 배워야 하는가)
파일 I/O(입출력)는 프로그래밍에서 매우 중요한 개념입니다. 실무에서는 데이터 저장, 읽기, 수정 등 다양한 작업을 파일을 통해 수행합니다. 예를 들어, 애플리케이션에서 사용자 데이터를 파일에 저장하거나, 로그 파일을 통해 시스템 상태를 기록하는 등의 작업이 필요합니다. 파일 I/O를 모르고 있다면, 데이터 영속성을 확보하지 못해 프로그램이 종료되면 모든 정보가 사라지거나, 다른 시스템과의 데이터 교환이 불가능해지는 문제가 발생할 수 있습니다.
2. 핵심 개념 설명
파일 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): 읽어온 내용을 출력합니다.- 잘못된 코드:
- 올바른 코드:
- 잘못된 코드:
- 올바른 코드:
- 파일 I/O는 데이터를 영속적으로 저장하고 읽어오는 기본적인 기술입니다.
- 파일 쓰기와 읽기 두 가지 개념이 있으며, 각각 저장소와 정보 접근에 해당합니다.
- 파일 경로와 모드를 올바르게 설정하는 것이 중요합니다.
- 다음에 학습하면 좋은 주제: 예외 처리와 바이너리 파일 I/O.
실생활 비유로는 책을 생각해볼 수 있습니다. 책에 내용을 쓰는 것은 파일 쓰기와 같고, 책을 읽는 것은 파일 읽기와 같습니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| 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 예제입니다.
코드 한 줄씩 동작 설명
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() 메소드를 사용해야 합니다.