티스토리 뷰
Object Serialize
- 객체의 직렬화란 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 송수신이 가능하게 하는 것을 의미합니다.
- 비유를 하자면 어떤 어드벤쳐 게임이 프로그램이 있다고 합시다. 게임이 진행되면 게임 캐릭터는 계속 해서 상태가 변합니다.
- '더 강해지거나, 약해지거나', '무기를 잃거나, 그 무기를 사용하거나' 할 수도 있죠.
- 하지만 사용자가 게임을 끄고 다시 돌아왔을때, 캐릭터의 상태가 초기화 되면 안되겠죠? 저장을 해야 합니다.
- 이 때 데이터를 만들어낸 자바 프로그램에서만 사용한다면 직렬화를 사용하여 납작해진 객체가 저장된 파일을 만들고 나중에파일을 열 때는 프로그램에서 직렬화된 객체를 읽어서 다시 살아 숨쉬는, 힙에 들어있는 형태의 객체로 만들어 줍니다.
객체 직렬화 방법
- Java 코드를 이용해 객체를 직렬화하는 방법은 아래와 같습니다.
- 동작 절차를 자세히 보자면
- FileOutPutStream 객체를 만들어 파일은 연결합니다.
- ObjectOutputStreanm을 사용하면 객체를 저장할 수 있는데 파일에 직접 연결할 수는 없습니다.
- 보조 객체가 필요합니다. 이런 과정을 한 스트림을 다른 스트림과 연쇄(chain) 한다고 부릅니다.
- characterOne, characterTwo, characterThree 로 참조되는 객체를 직렬화하고 "MyGame.ser"에 저장합니다.
- 맨 위에 있는 스트림을 닫으면 그 믿에 있는 스트림도 모두 닫힙니다.
1.
FileOutputStream fileStream = new FileOutputStream("MyGame.ser");
//FileOutputStream 을 만든다
2.
ObjectOutPutStream os = new ObjectOutPutStream(fileStream);
//ObjectOutPutStream 을 만든다
3.
os.writeObject(characterOne);
os.writeObject(characterTwo);
os.writeObject(characterThree);
//characterOne, characterTwo, characterThree 로 참조되는 객체를 직렬화하고 "MyGame.ser" 에 저장한다.
4.
os.close();
- 자바 파일 입출력 API 에는 파일이나 네트워크 소켓과 같은 출발지 또는 목적지로의 연결을 나타내는 연결 스트림 (connection stream)과 다른 스트림에 연쇄되어야만 쓸 수 있는 연쇄 스트림(chain stream)이 있습니다.
- 위 처럼 최소한 스트림 두 개를 연결 해야만 유용한 작업을 할 수 있는 경우도 있습니다. 왜 일까요??
- 연결 스트림은 일반적으로 너무 저수준이기 때문입니다. 예를 들자면 FileOutputStream에는 바이트를 저장하기 위한 메소드가들어있지만 실제 바이트 단위로 저장하는 경우는 별로 없습니다.
- 우리가 실제로 저장해야 하는 것은 객체이므로 더 고수준의 연쇄 스트림이 필요한 것이죠.
- 그런데 사실 각 클래스는 하나씩의 기능만 잘 발휘하는 것이 좋습니다. 이렇게 다양한 연결 및 연쇄 스트림을 조합하면 유연한 프로그래밍을 할 수 있습니다.
- 객체의 직렬화 과정은 위의 그림과 같은 과정으로 진행 됩니다.
관련글
끝으로
이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
(JAVA0 SerialVersionUID 정의 및 사용법 (0) | 2016.10.27 |
---|---|
JAVA Java.nio 클래스란 (0) | 2016.10.27 |
JAVA 역직렬화 : 객체 복구 (0) | 2016.10.26 |
(Java) 특정 폴더 파일 확장자 별 정리 프로그램 구현방법 (1) | 2016.09.11 |
(Java) 파일(File) 이동(Move) 기능 구현방법 (0) | 2016.09.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- intelij
- 이펙티브
- git
- windows
- 일본 배낭여행
- 텐트
- 스프링부트
- JavaFX 종료
- 자전거
- effective java
- JavaFX
- 배낭여행
- 일본 자전거 여행
- JavaFX Window Close
- JavaFX Table View
- 이펙티브 자바
- 일본 여행
- 일본여행
- Java UI
- 자전거 여행
- 자바
- java
- TableView
- 배낭 여행
- 인텔리제이
- 방통대 과제물
- springboot
- effectivejava
- 이펙티브자바
- JavaFX 테이블뷰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함