Input/Output : 입력/출력
Input : 프로그램으로 데이터를 가져오는 것
Output : 프로그램에서 데이터를 내보내는 것
| I/O 종류 | 용도 | 주요 클래스 | 설명 / 예시 |
|---|---|---|---|
| 콘솔(Console) | 사용자와 대화 | Console | 키보드 입력, 화면 출력 |
| 파일(File) | 간단한 파일 읽기/쓰기 | File | 파일 전체를 읽거나 쓰기, 간단한 작업에 적합 |
| 스트림(Stream) | 큰 데이터, 세밀한 제어 | StreamReader, StreamWriter | 텍스트 단위 읽기/쓰기, 버퍼 사용 가능 |
| 바이너리(Binary) | 이진 데이터 | BinaryReader, BinaryWriter | 이미지, 오디오, 비디오 등 이진 파일 처리 |
Stream 데이터 표현
byte [] buffer;
stream 데이터 종류
Stream (추상 클래스 - 최상위 부모) │ ├─ FileStream → 파일 데이터 ├─ MemoryStream → 메모리 내 데이터 (임시 저장, 변환 작업) ├─ NetworkStream → 네트워크 데이터 ├─ GZipStream → 압축 데이터 ├─ CryptoStream → 암호화 데이터 ├─ StreamReader, StreamWriter → 문자열 데이터 └─ BufferedStream → 버퍼링된 데이터
정리된 개념도
┌─────────────────────────────────────┐ │ 모든 데이터는 결국 byte[] (바이트) │ └─────────────────────────────────────┘ │ ↓ ┌────────────────┐ │ Stream (추상) │ ← 최상위 부모 └────────────────┘ │ ────────────┼──────────── │ │ │ ┌──────────┐ ┌─────────────┐ ┌──────────────┐ │FileStream│ │MemoryStream │ │NetworkStream │ └──────────┘ └─────────────┘ └──────────────┘ │ │ │ ↓ ↓ ↓ 파일 데이터 메모리 작업 네트워크 데이터 (txt, jpg, (임시 저장, (패킷, mp3, etc) 변환 작업) TCP/UDP)
바이트 단위
FileStream : 파일을 바이트로 읽기/쓰기BinaryReader : 바이너리 데이터 읽기BinaryWriter : 바이너리 데이터 쓰기문자열 단위
StreamReader : 텍스트 파일 읽기StreamWriter : 텍스트 파일 쓰기StringReader : 문자열을 Stream처럼 읽기StringWriter : 문자열을 Stream처럼 쓰기정적 클래스
인스턴스를 만들 수 없음 → 행위(메서드)만 존재 → 속성이 존재하지 않음
File : 파일 생성, 복사, 삭제, 읽기/쓰기
Directory : 디렉토리 생성, 삭제, 탐색
Path : 경로 문자열 처리
인스턴스 클래스(상세 정보)
객체 생성이 필요 → 속성 + `메서드 존재
FileInfo : 파일 정보 (파일 이름, 크기, 날찌 등)
DirectoryInfo : 디렉토리 정보
모니터링
FileSystemWatcher : 파일/폴더 변경 감시구조도
파일 시스템 관련 클래스 │ ├─ Stream 계열 (데이터 읽기/쓰기) │ ├─ 바이트: FileStream, BinaryReader, BinaryWriter │ └─ 텍스트: StreamReader, StreamWriter, StringReader, StringWriter │ └─ 파일 관리 계열 ├─ 파일: File, FileInfo ├─ 디렉토리: Directory, DirectoryInfo ├─ 경로: Path └─ 감시: FileSystemWatcher
인코딩 : 문자(사람이 읽는 것)를 바이트(컴퓨터가 저장하는 것)로 변환하는 과정
UTF-8 : 한글을 지원하지만 일부 윈도우 프로그램에서는 한글이 깨짐
UTF-8-BOM : 윈도우 프로그램에서 한글이 깨지지 않음
EUC-KR : 구형 한국 시스템
CP949 : 윈도우 한글 환경, 레거시 시스템에서 사용
KS_C_5601-1987 : 한국 산업 표준으로 가장 많이 사용
디코딩 : 바이트(컴퓨터가 저장하는 거섀)를 문자(사람이 읽는 것)로 변환하는 과정
using : 다른 네임스페이스의 클래스를 간단하게 사용할 수 있게 해줍니다.
java나 python에 import와 유사
리소스 자동 해제 (Dispose패턴)
Dispose : 사용한 리소스를 반납하는 것
리소스 : 컴퓨터의 자원 (파일, 데이터베이스 연결, 네트워크 연결, 메모리)
파일을 열었지만 닫지 않은 경우를 방지하기 위해
"열린 상태"로 둔다면 메모리를 계속 소요 → 프로그램이 느려지거나 오류 발생using을 사용할 경우 리소스를 자동으로 해제
using으로 인한 Dispose 사용
using (FileStream fs = new FileStream ( Path.Combine(Application.StartupPath, "text.txt"), // 보통은 Create, /OpenOrCreate 사용 FileMode.OpenOrCreate, // FileAccess -> 내가 무엇을 할지 (읽을것인지, 쓸것인지, 읽기쓰기 둘다 할지) FileAccess.Write // FileShare -> 상대방은 무엇을 할지 (보통 상대방은 읽기만 가능하도록 구현) FileShare.Read )) { string textData = "테스트입니다."; // 바이트로 전환 작업 -> string으로는 확인할 수 없기 때문 Encoding kor = Encoding.GetEncoding("ks_c_5601-1987"); byte [] buffer = kor.GetBytes(testData); fs.Write(buffer, 0, buffer.Length) };