I/O
- 데이터의 입력, 출력
- 끝단: 노드
- 노드 간 연결, 데이터 전송: 스트림
- 스트림은 단방향
기본 스트림
- 바이트: XXXInputStream, XXXOutputStream
- 문자: XXXReader, XXXWriter
- 버퍼 사용시 flush() 호출하여 버퍼 내용을 비움
File
- 가장 기본적인 입출력 장치 중 하나로 파일과 디렉터리를 다루는 클래스
보조 스트림
- Filter Stream, Processing Stream
- 다른 스트림에 부가적인 기능을 제공
- 스트림 체이닝: 필요에 따라 여러 보조 스트림을 연결하여 사용 가능
System.in: 바이트 스트림
객체 직렬화
- 객체를 저장하거나 네트워크로 전송하기 위해 연속적 데이터로 변환
- Serializable 인터페이스 구현 필요
- 클래스의 모든 멤버가 Serializable 인터페이스를 구현해야 함
- transient: 직렬화 제외
- SerialVersionUID: 클래스의 버전을 나타냄. 저장된 파일과 현재 클래스 버전이 다를 경우 같은 클래스로 취급하지 않음(컴파일 시 변경) 👉 명시적으로 고정된 버전 사용으로 해결
Scanner
BufferedReader
Parsing
- parsing은 변환이라는 뜻, 태그 구별, 내용 추출
- Parser: DOM, SAX
데이터 형태
XML
- 마크업 언어: 태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어
- XML: Extensible Markup Language
- HTML과 달리 필요에 따라 태그 확장이 가능
- DTD, Scheme: XML 규약, 규칙 정리, 형식을 규정
- Valid: 규칙을 준수하고 있음을 뜻함
XML Parsing
- Parsing: 문서에서 필요한 정보를 얻기 위해 태그를 구별하고 내용을 추출하는 과정
- SAX parser: 이벤트 기반 처리. 빠르지만, 한번에 처리하여 다양한 탐색이 어려움
- DOM parser: 문서 구조 전체를 자료구조에 저장하여 탐색(트리 구조). 다양한 탐색이 가능하지만, 느리고 무거움
SAX Parser
- Factory에서 Parser 생성 👉 이벤트 발생 👉 DefaultHandler를 상속받은 커스텀 Handler 호출
DOM Parser
- 문서를 완전히 메모리에 로딩 후 필요한 내용을 찾음
- 문서를 구성하는 모든 요소를 노드(태그, 속성, 값)로 구성
- Element는 태그만을 뜻함
Swing
- GUI 제공
- Container: 다른 컴포넌트들을 배치하기 위한 컴포넌트. 다른 Container를 포함할 수 있고, 복합적인 Layout 구성 가능
- JFrame: 독립적으로 사용될 수 있으며 타이틀과 사이즈 조절 가능
- JPanel: 반드시 다른 Container에 포함되어야 함
- Layout: 배치 방법
- LayoutManager: Container 별 Component의 위치와 크기, 배치 방식을 결정
XXXListener
- 이벤트 처리에 대한 메서드를 정의한 인터페이스
- 하나의 컴포넌트에 여러 핸들러 붙일 수 있음
XXXEventAdapter
- 이벤트 핸들러를 구현하나 필요한 메서드만 재정의할 때 이용