컴파일에 대해서
컴파일은 단순히 java 코드를 bytecode로 바꾸는 과정이 아님.
ex) re-ordering : 성능 상의 이유로 작성된 javaCode의 순서를 바꾸어 bytecode로 작성함.
: 다른 Stream을 받아 변환하는 Stream.
생성자로 다른 Stream을 받아오는 것이 특징! (입력장치, 출력장치에 바로 연결되지 않는다!)
- 데코레이터 패턴
- 데이터를 쓸 때는, 데이터를 읽을 때도 고려해야 한다.
파일로 작성된 데이터를 읽어올 때는, 데이터를 각각 분리하여 읽어올 필요가 있다.
(하나의 파일 안에는 여러 데이터가 존재할 것. 그것을 전체 문자열로 읽어온 후 분리하기보다, 미리 분리하여 하나씩 가져올 수 있다면 더 편리함.)
readInt()
/ writeInt()
: int 읽기/쓰기readDouble()
/ writeDouble()
: Double 읽기/쓰기readBoolean()
/ writeBoolean()
: boolean 읽기/쓰기readUTF()
/ writeUTF()
: 문자열(한글 포함) 읽기/쓰기Marshalling
Unmarshalling
Serializable
을 구현해야 한다
RMI
: Remote Method Invocation - 분산 컴퓨팅의 근간이 되는 기술
Serializable
: 내용이 없는 마커 인터페이스. 직렬화 가능 여부를 알려줌.externalizable
: 직렬화 지원하는 인터페이스
마커 인터페이스가 아니어서 사용이 불편 -> 보통Serializable
을 사용한다.
readObject()
writeObject()
reset()
: writeObject()
뒤에 flush()
와 함께 붙여줄 것
class Class
: 멤버변수, 메서드, 생성자와 같은 '클래스'의 정보를 저장하는 클래스
객체정보(=멤버변수 값)을 가지는 게 아님!
클래스 버전(serialVersionUID) 관리
컴파일러가 버전을 관리함 : 엄격한 검증이 이뤄지므로 문제 생길 여지가 적음
사람이 버전을 관리함 : 자유로운 사용 but 문제가 생기면 결과를 책임져야 함
transient 의 의미
직렬화에서 배제됨 (=복사될 때 초기값이 들어감)