File System (파일 시스템)
개요 (Overview)
파일 시스템 컴포넌트는 Unity 게임 프레임워크에서 플랫폼 독립적인 파일 접근 및 관리 인터페이스를 제공합니다.
이를 통해 게임은 플랫폼별 구현 세부 사항을 직접 다루지 않고도 파일 작업을 수행할 수 있으며, 배포 플랫폼과 관계없이 일관된 API를 제공합니다.
원격 소스에서 파일을 다운로드하는 방법은 Download System을 참조하세요.
시스템 개요 (System Overview)
파일 시스템은 다음 기능을 지원합니다:
•
플랫폼 독립적인 파일 읽기 및 쓰기
•
다양한 저장 위치에서 파일 접근
•
효율적인 I/O를 위한 파일 스트림 관리
•
플랫폼별 파일 접근 메서드 지원
아키텍처 (Architecture)
파일 시스템은 게임 프레임워크 전반에서 사용되는 컴포넌트-매니저-헬퍼 패턴을 따릅니다.
핵심 구성 요소 (Key Components)
FileSystemStream
FileSystemStream은 추상 기본 클래스로, 플랫폼 간 공통의 파일 작업 인터페이스를 제공합니다.
제공 기능:
•
파일 데이터 읽기
•
파일 데이터 쓰기
•
특정 위치로 시킹(Seek)
•
파일 라이프사이클 관리 (열기/닫기)
플랫폼별 구현체(AndroidFileSystemStream 등)는 이 클래스를 상속받아 실제 동작을 정의합니다.
AndroidFileSystemStream
AndroidFileSystemStream은 안드로이드 전용 구현체로, 안드로이드 애셋 시스템 내의 파일에 접근합니다.
특징:
•
읽기 전용: 읽기 작업만 지원
•
Asset Manager 연동: 안드로이드 AssetManager를 사용하여 파일 접근
•
특수 경로 형식 필요: !/assets/ 분할 플래그를 포함하는 경로 형식 사용
•
플랫폼 제약: 새 파일 생성 불가, 기존 파일 수정 불가
예:
// 안드로이드 전용 경로 형식
string path = "jar:file://your_apk_path!/assets/yourfile.dat";
using (AndroidFileSystemStream stream = new AndroidFileSystemStream(path, FileSystemAccess.Read, false))
{
// 파일 읽기 작업 수행
}
C#
복사
파일 시스템 사용법 (Using the File System)
안드로이드에서 파일 읽기 (Reading Files on Android)
파일 스트림 생성:
string path = "jar:file://your_apk_path!/assets/yourfile.dat";
using (AndroidFileSystemStream stream = new AndroidFileSystemStream(path, FileSystemAccess.Read, false))
{
// 파일 읽기
}
C#
복사
데이터 읽기:
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
// 읽은 데이터 처리
C#
복사
시킹 (Seeking):
// 특정 위치로 이동 (앞으로 가는 시킹만 효율적으로 지원)
stream.Seek(position, SeekOrigin.Begin);
C#
복사
제한 사항 (Limitations):
•
데이터 쓰기 불가 (WriteByte, Write는 예외 발생)
•
새 파일 생성 불가
•
파일 길이 수정 불가
파일 시스템 기능 및 제약 (Features and Limitations)
기능 | 설명 | 안드로이드 지원 |
파일 읽기 | 파일에서 바이너리 데이터 읽기 | ✓ 지원 |
파일 쓰기 | 파일에 데이터 쓰기 | ✗ 미지원 |
시킹 | 파일 내 특정 위치 탐색 | ✓ 제한적 지원 (앞으로만 효율적) |
길이 조회 | 파일 길이 확인 | ✓ 지원 |
파일 생성 | 새 파일 생성 | ✗ 미지원 |
디스크 플러시 | 변경 사항 저장소에 강제 반영 | ✗ 미지원 |
경로 형식 | 파일 경로에 필요한 형식 | !/assets/ 포함 필요 |
다른 프레임워크 시스템과의 통합 (Integration with Other Framework Systems)
파일 시스템은 다른 프레임워크 시스템의 기초 서비스로 동작하며, 다양한 I/O 작업에서 플랫폼에 독립적인 인터페이스를 제공합니다.
안드로이드 구현 세부사항 (Android Implementation Details)
Asset Manager 연동 (Asset Manager Integration)
AndroidFileSystemStream은 앱에 패키징된 파일에 접근하기 위해 안드로이드 Asset Manager를 사용합니다.
초기화:
•
현재 안드로이드 액티비티에서 AssetManager를 가져옴
•
효율적인 JNI 호출을 위한 Java 메서드 ID 준비
경로 처리:
•
!/assets/ 마커가 포함된 경로를 파싱하여 실제 자산 경로 추출
•
예:
jar:file:///data/app/package-1/base.apk!/assets/file.dat
→ file.dat
Plain Text
복사
리소스 관리:
•
Java 객체를 올바르게 Dispose하여 메모리 누수 방지
•
JNI 참조를 효율적으로 처리
결론 (Conclusion)
파일 시스템 컴포넌트는 게임 프레임워크에서 플랫폼 독립적인 파일 작업 인터페이스를 제공합니다.
이 문서는 주로 안드로이드 구현을 다루었지만, 전체 아키텍처는 FileSystemStream 인터페이스를 통해 다중 플랫폼 지원을 염두에 두고 설계되었습니다.
게임에서 파일 작업을 구현할 때는:
•
타겟 플랫폼에 맞는 FileSystemStream을 사용해야 하며
•
특히 모바일 환경에서는 파일 접근 권한 및 제약 사항을 반드시 고려해야 합니다.