직렬화란, 말 그대로 직렬로 만들겠다는 뜻이다.
그렇다면 역직렬화란? 이또한 역직렬로 만들겠다는 뜻이다.
사실 직렬화라는 단어는 '객체'에 대한 내용이 나오지 않는다면 의미가 없습니다.
객체를 어떤 장치에 쓰고, 다시 객체로 복원하는지에 대한 작업이
직렬화와 역직렬화에 관련된 작업이 됩니다.
우리가 만든 객체가 하나 있다고 해봅시다.
이때에 이 객체를 똑같이 복원하고 싶을 때 어떻게 할까요?
객체는 어플리케이션에 만들어지는데,
프로그램이 죽는 순간 다 날라가버리지 않습니까?
마치 피x온라인에서 전설의 카드로 '베르캄프'선수를 뽑았는데,
피x온라인을 종료하자마자 베르캄프가 날라간다고 해봅시다... 하...
이처럼, 어플리케이션을 다시 켰을 때
지금까지 만들어놓은 객체를 복원되게 하고싶다면?
이러한 요구로부터 나온 단어가 바로 '직렬화'입니다.
객체지향적인 부분이 아니라면, 직렬화라는 개념이 나오지 않습니다.
왜냐하면, 직렬화는 객체와 관련된 것이기 때문입니다.
기본적인 개념은,
이 객체를 어떤 객체를 보관할 수 있는 저장장치에 쓰고,
다시 역직렬화 즉, 다시 복원하는 작업을 수행하는 것입니다.
객체라는 것은 상태와 기능으로 이뤄져있습니다.
그러면, 기록할 때는 뭘 기록할까요?
당연히 상태겠지요.. 기능은 상태가 아니지 않습니까?
그런데, 아무렇게나 저장을 한다면 복원을 할 수 없습니다.
직렬화를 사용하는 이유가 저장장치에 객체를 보관했다가
다시 복원하려고 만든 개념이지 않습니까....
Format을 만든다면, 복원이 가능합니다.
포멧은 읽을 때 필요한 것 아니겠습니까?
복원이 안되면 저장의 의미가 없기 때문에,
따라서 포멧이 필요한 것이고, 포멧을 보고 객체를 복원할 수 있습니다.
그래서 포멧이 있어야되는것이지요...
우리만의 약속으로 몇 바이트까지는 헤더,
몇 바이트까지는 크기, 몇 바이트부터는 내용...
이런식으로 파일을 저장해서 복원할 수 있습니다.
'삽질의 현장 > - ETC' 카테고리의 다른 글
[삽잡이::android]설치하자 안드로이드 스튜디오 (0) | 2016.01.22 |
---|---|
[삽잡이] 모듈(module) 이란? (0) | 2015.11.14 |
[삽잡이] XML (0) | 2015.11.11 |
[삽잡이] 객체지향 - 상속 (0) | 2015.10.26 |
[삽잡이] 객체지향 프로그래밍에서 주의해야할 점 (0) | 2015.10.26 |