# 주요 개념 요약
**분류**: 프로그래밍/소프트웨어 개발
**대상 사용자**: 대규모 데이터 처리를 필요로 하는 파이썬 개발자
## 핵심 내용
- **메모리 효율성**: 대량의 파일(예: 수십GB)은 메모리에 전체 로드하는 대신 **버퍼 단위로 분할 읽기**하는 것이 권장됨.
- **제너레이터 활용**: `IOBase` 타입의 파일 핸들을 사용해 **생성자(generator)**를 통해 **차단 단위(chunk)**로 읽고, **구분자(delimiter)**를 기준으로 처리.
- **핵심 함수**: `reader()` 함수는 `bytearray`와 `index()` 메서드를 활용해 **바이트 단위로 읽은 후 문자열로 변환**하여 처리.
- **파라미터**: `chunk_size` (기본값: 8192)로 버퍼 크기 조절, `delimiter` (기본값: `\n`)로 행 단위 처리 가능.
## 세부 내용
### 1. 대량 파일 처리 문제점
- **메모리 부족**: 전체 파일을 리스트로 로드하면 메모리 사용량이 급격히 증가.
- **성능 저하**: 메모리에 데이터를 로드한 후 `split()` 처리 시, **초대규모 리스트 생성**으로 성능 저하.
- **파이썬 공식 문서 권장사항**: `range()` 대신 제너레이터 사용 권장 (예: 백만 번 루프 시 리스트 대신 `range` 활용).
### 2. 제너레이터 기반 해결 방안
- **버퍼 단위 읽기**: `chunk_size`로 파일을 분할해 읽고, `delimiter`를 기준으로 **실시간 처리**.
- **예시 코드**:
```python
def reader(f: IOBase, delimiter: str='\n', chunk_size=8192):
buffer = bytearray()
delim = delimiter.encode()
while True:
chunk = f.read(chunk_size)
if not chunk:
yield buffer.decode()
return
buffer.extend(chunk)
# 구분자 처리 로직
```
- **활용 사례**: `open()` 함수의 기본 `line` 단위 처리도 가능 (예: `for line in f:`).
## 결론
- **효율적인 대량 파일 처리**: 제너레이터를 활용한 **차단 단위 읽기**는 메모리 사용량을 최소화하고, 대규모 데이터 처리 시 필수적.
- **추천 실무 팁**:
- `IOBase` 타입의 파일 핸들을 사용해 유연한 처리.
- `open()`의 기본 `line` 단위 처리도 간단한 경우에 적합.
- `chunk_size`는 시스템 메모리와 처리 속도에 따라 조정 필요.