📦 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과 네트워크
- 인터넷 상의 자원의 위치를 나타내는 문자열 형식
예시 구조
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
| 항목 | TCP | UDP |
|---|
| 연결 방식 | 연결 지향 (3-way handshake) | 비연결 (데이터그램 전송) |
| 신뢰성 | 데이터 순서 보장, 손실 복구 | 신뢰성 없음 (빠름) |
| 속도 | 느림 | 빠름 |
| 사용 예 | 웹, 파일 전송, 이메일 | 스트리밍, 게임, 실시간 채팅ㅋ |
✅ 참고 클래스
| 기능 | 클래스 |
|---|
| 객체 직렬화 | ObjectOutputStream, ObjectInputStream |
| 파일 I/O | FileOutputStream, FileInputStream |
| 버퍼 I/O | BufferedReader, BufferedWriter |
| 문자 변환 | InputStreamReader, OutputStreamWriter |
| URL 통신 | URL, URLConnection, HttpURLConnection |
🥊 JSON vs XML 비교
| 항목 | JSON | XML |
|---|
| 구조 | 키-값 쌍 (객체, 배열) | 태그 기반 트리 구조 |
| 가독성 | ✅ 간단하고 짧음 | ❌ 길고 복잡함 |
| 데이터 타입 | 문자열, 숫자, 배열, 불리언, 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");
📝 요약
- 절대경로: 항상 정확하지만, 위치가 바뀌면 깨질 수 있음
- 상대경로: 유연하고 이동 가능성이 있는 프로젝트에 유리