Java - IO API

Jean·2025년 6월 26일
0

풀스택 교육

목록 보기
6/28

📦 1. 버퍼(Buffer)

개념

  • 버퍼는 한 번에 여러 바이트를 읽거나 쓸 수 있게 해주는 임시 저장 공간
  • 매번 1바이트씩 읽는 것보다 훨씬 빠르게 입출력을 처리할 수 있음

예시 클래스

  • BufferedReader, BufferedWriter
  • BufferedInputStream, BufferedOutputStream

🌸 2. 객체 직렬화 (Serialization)

직렬화란??

  • 객체를 저장하거나 전송할 수 있도록 바이트 형태로 변환하는 것
  • 서버가 종료될 때 세션 객체 등을 저장하고 다시 복원할 수 있음

직렬화 대상이 되려면?

  • 클래스가 java.io.Serializable 인터페이스를 implements 해야 함
  • 구현 메서드 없음
class User implements Serializable { ... }

예외

  • 직렬화되지 않은 객체를 직렬화하려고 하면 NotSerializableException 발생

transient 키워드

  • 직렬화에서 제외할 필드에 사용 → 저장되지 않고 복원되지 않음

Externalizable 인터페이스

  • Serializable보다 직렬화 제어가 더 어려움
  • writeExternal(), readExternal() 메서드를 직접 구현해야 함

🌐 3. URL과 네트워크

💎 URL (Uniform Resource Locator)

  • 인터넷 상의 자원의 위치를 나타내는 문자열 형식

예시 구조

https://서버주소[:포트번호]/경로/파일명?name=value&name=value
  • URI: 서버주소/경로/파일명
  • URL: 프로토콜명://서버주소[:포트번호]/패스.....?쿼리문자열
    • 로컬일때는 프로토콜명 대신 file:/// ( c드라이브가 기본으로 지정 )
  • Query 문자열: ?name=value&...

URL 클래스 사용 예

URL url = new URL("https://example.com/file.txt");
InputStream is = url.openStream(); // 웹 자원 읽기

java.net 패키지에서 제공


⛓️ 4. TCP vs UDP

항목TCPUDP
연결 방식연결 지향 (3-way handshake)비연결 (데이터그램 전송)
신뢰성데이터 순서 보장, 손실 복구신뢰성 없음 (빠름)
속도느림빠름
사용 예웹, 파일 전송, 이메일스트리밍, 게임, 실시간 채팅ㅋ

✅ 참고 클래스

기능클래스
객체 직렬화ObjectOutputStream, ObjectInputStream
파일 I/OFileOutputStream, FileInputStream
버퍼 I/OBufferedReader, BufferedWriter
문자 변환InputStreamReader, OutputStreamWriter
URL 통신URL, URLConnection, HttpURLConnection

🥊 JSON vs XML 비교

항목JSONXML
구조키-값 쌍 (객체, 배열)태그 기반 트리 구조
가독성✅ 간단하고 짧음❌ 길고 복잡함
데이터 타입문자열, 숫자, 배열, 불리언, null전부 문자열 (타입 직접 지정 불가)
파싱 속도빠름느림
문법가볍고 직관적무겁고 엄격함 (닫는 태그 필수)
사용성웹 API, 모바일 앱, JavaScript 등오래된 시스템, SOAP, 문서 중심
주석 지원❌ 지원하지 않음✅ 주석 가능 (<!-- -->)
확장성제한적매우 유연 (속성, 네임스페이스 등 가능)

예시

//JSON
{
  "name": "홍길동",
  "age": 25,
  "email": "hong@example.com"
}
//XML
<user>
  <name>홍길동</name>
  <age>25</age>
  <email>hong@example.com</email>
</user>

✅ 요약 문장

  • JSON은 구조가 간단하고 가볍기 때문에 현대 웹 환경에서 널리 사용됨
  • XML은 문서 구조 표현에 강하고, 확장성 및 형식이 중요한 시스템에 적합

🛣️  절대경로 vs 상대경로

구분설명예시
절대경로 (Absolute Path)파일 또는 폴더의 전체 경로 루트(최상위 디렉토리)부터 시작c:/iotest/myimage/cuteone.jpg (Windows) /home/user/data.txt (Linux/Mac)
상대경로 (Relative Path)현재 작업 위치 기준으로 접근하는 경로 .: 현재 디렉토리, ..: 상위 디렉토리./data.txt → 현재 위치에 있는 파일 ../images/img.jpg → 상위 폴더의 images

✅ 예시

// 절대경로
File file1 = new File("c:/iotest/myimage/cuteone.jpg");

// 상대경로 (예: 프로젝트 루트 기준)
File file2 = new File("resources/data.txt");

📝 요약

  • 절대경로: 항상 정확하지만, 위치가 바뀌면 깨질 수 있음
  • 상대경로: 유연하고 이동 가능성이 있는 프로젝트에 유리
profile
햇내기 개발자 지망생

0개의 댓글