반응형
- 컴퓨터 A에 있는 정보를 컴퓨터 B에 전송하기 위한 것이
직렬화입니다. 객체를직렬화하게 되면 일련의 바이트 스트림으로 변환됩니다.직렬화된 정보를 복원하는 것을역직렬화라고 하는 데, 이를 통해서 객체의 원형을 복원할 수 있습니다.
질문에서 언급한대로, 객체에서 getter와 setter를 사용하는 것은 같은 컴퓨터에 있을 경우에는 가능합니다. 따라서 같은 컴퓨터에 사용할 경우에는 직렬화에 대한 고민을 할 필요가 없습니다.
그러나 사용하고 있는 이 객체를 다른 컴퓨터(혹은 종료된 후, 재실행되었을 때)에 전송하여, 그대로 사용하는 것에 대한 고민한다면, 직렬화 가 필요로 합니다.
객체를 어떻게 해야 다른 컴퓨터에 전송하여 그 객체를 그대로 사용할 수 있을까요?
기본적으로 다음과 같은 생각을 해볼 수 있을 겁니다.
- 원본에서 사용하고 있는 프로그램코드(함수, 로직 등)이 그대로 대상컴퓨터에도 있어야할 겁니다.
- 1항이 만족하더라도, 코드만 존재할 뿐 사용하고 있는
객체가 가지고 있었던 정보는 대상컴퓨터에 없습니다. - 따라서 컴퓨터A에서 존재하였던
객체가 가진 정보를 컴퓨터B에도 전달해야할 필요가 있습니다.
자바의 Serializable(직렬화)
- 자바는 분산환경(서로 다른 컴퓨터에서 주어진 목적을 위해서 협력하는 환경)에서 분산된 컴퓨터들에서 객체정보를 주고 받을 수 있게 하기 위해서 RMI (Remote Method Invocation, 원격 메서드 호출)을 지원합니다. (일반적으로 RPC - Remote Procedure Call, 원격 프로시저 호출 - 라고 부르며, 다른 언어나 플랫폼에도 개념이 있습니다. )
- 메서드의 경우 메서드 인자로 객체가 전달될 수 있고, 또한 메서드의 반환(return)결과로 객체가 전달될 수 있습니다.
- 그런데 이 함수를 호출하는 쪽은 컴퓨터A이고, 이 메서드가 실행되는 곳은 컴퓨터B인 환경을 지원하는 것이 자바의 RMI입니다.
- RMI를 동작하게 하기위해서는 객체를 네트워크로 전송가능한 형태로 바꿀 필요가 있는 데, 이 때 사용되는 개념이 직렬화/역직렬화입니다.
- 객체를 복원가능하면서 전송이 가능한 상태로 바꾸는 작업이
직렬화입니다.역직렬화는 반대로 작업하여 다시 객체로 되게 만드는 것입니다. - 자바는 객체중에 직렬화가 가능한 객체를 표시하기 위해서는 Serializable 인터페이스를 상속하게 하고 있습니다. 이 경우, 객체를 메모리에 생성할 때부터, 직렬화를 염두에 두고 관리합니다.
직렬화
직렬화는 자바의 Serializable를 사용하지 않더라도, 정보를 대상 시스템에 복원가능하게 전달하기 위해서 다른 형태(텍스트, 바이트, JSON, XML 등)로 변경하는 행위 일체를 말합니다. 자바의 경우,Serializable 인터페이스를 통해서 편의성을 제공해줍니다.
출처 : https://hashcode.co.kr/questions/3297/
반응형