.NET Framework serialization의 기본 사항
업데이트: 2007년 11월
serialization은 개체를 메모리, 데이터베이스 또는 파일에 유지하기 위해 바이트의 스트림으로 변환하는 프로세스입니다. 필요할 때 다시 만들 수 있도록 개체의 상태를 저장하는 것이 주된 목적입니다. 이와 반대의 프로세스를 deserialization이라고 합니다.
serialization의 작동 방식
이 그림에서는 serialization의 전체 프로세스를 보여 줍니다.
개체는 스트림으로 serialize되며, 이 스트림은 데이터뿐만 아니라 버전, culture 및 어셈블리 이름과 같은 개체의 형식에 대한 정보도 포함합니다. 이 스트림으로 개체를 데이터베이스, 파일 또는 메모리에 저장할 수 있습니다.
serialization의 용도
serialization을 사용하면 개발자는 데이터 교환뿐 아니라 개체의 저장소를 제공하면서 개체의 상태를 저장하고 필요할 때 다시 만들 수 있습니다. serialization을 통해 개발자는 웹 서비스를 사용하여 개체를 원격 응용 프로그램에 보내고, 개체를 한 도메인에서 다른 도메인으로 전달하고, 개체를 XML 문자열로 방화벽을 통과시키고, 응용 프로그램 간에 보안이나 사용자별 정보를 유지 관리하는 등의 작업을 수행할 수 있습니다.
개체를 serialize 가능하도록 만들기
개체를 serialize하려면 serialize할 개체, serialize된 개체를 포함할 스트림 및 Formatter가 필요합니다. System.Runtime.Serialization에는 개체를 serialize 및 deserialize하는 데 필요한 클래스가 포함되어 있습니다.
SerializableAttribute 특성을 형식에 적용하여 이 형식의 인스턴스가 serialize 가능한 인스턴스임을 지정합니다. serialize하려고 시도했지만 형식에 SerializableAttribute 특성이 없으면 SerializationException 예외가 throw됩니다.
클래스 내의 필드를 serialize할 수 없도록 하려면 NonSerializedAttribute 특성을 적용합니다. serialize 가능한 형식의 필드에 특정 환경과 관련된 포인터, 핸들 또는 기타 데이터 구조가 포함되어 있고 이 필드를 다른 환경에서 다시 구성할 수 없는 경우에는 nonserialize로 지정할 수 있습니다.
serialize된 클래스에 SerializableAttribute로 표시된 다른 클래스의 개체에 대한 참조가 포함된 경우 해당 개체도 serialize됩니다.
이진 및 XML serialization
이진 serialization 또는 XML serialization을 사용할 수 있습니다. 이진 serialization에서는 읽기 전용인 멤버를 비롯하여 모든 멤버가 serialize되고 성능도 향상됩니다. XML serialization은 보다 유연하게 개체를 공유할 수 있고 상호 운용 용도로 사용할 수 있을 뿐 아니라 가독성이 높은 코드를 제공합니다.
이진 Serialization
이진 serialization은 이진 인코딩을 사용하여 저장소 또는 소켓 기반 네트워크 스트림 등에 사용할 수 있는 간결한 serialization을 생성합니다. 방화벽을 통한 데이터 전달에는 적합하지 않지만 데이터를 저장할 때 보다 나은 성능을 제공합니다.
XML Serialization
XML serialization은 개체의 공용 필드와 속성 또는 메서드의 매개 변수와 반환 값을 특정 XSD(XML 스키마 정의 언어) 문서와 일치하는 XML 스트림으로 serialize합니다. XML serialization을 사용하면 XML로 변환되는 공용 속성 및 필드가 있는 강력한 형식의 클래스가 만들어집니다. System.Xml.Serialization에는 XML serialize 및 deserialize에 필요한 클래스가 포함되어 있습니다.
XmlSerializer에서 클래스의 인스턴스를 serialize 또는 deserialize하는 방법을 제어하기 위해 클래스 및 클래스 멤버에 특성을 적용할 수 있습니다. 자세한 내용은 특성을 사용하여 XML Serialization 제어 및 XML Serialization을 제어하는 특성을 참조하십시오.
이 표에서는 XML serialization과 연관된 작업을 나열합니다.
작업 |
참조 |
---|---|
개체 serialize |
|
개체 deserialize |
|
클래스 및 XML 스키마 문서 생성 |
|
XML 요소 및 XML 특성 이름 한정 |
|
XML 스트림의 대체 요소 이름 지정 |
|
파생된 클래스의 serialization 제어 |
SOAP serialization
XML serialization은 SOAP 사양과 일치하는 XML 스트림으로 개체를 serialize하는 데 사용할 수도 있습니다. SOAP는 특히 XML을 사용하여 프로시저 호출을 전송하기 위해 만들어진 XML 기반 프로토콜입니다. 일반적인 XML serialization과 마찬가지로, 특성을 사용하면 XML Web services를 통해 생성된 리터럴 스타일 SOAP 메시지를 제어할 수 있습니다. 자세한 내용은 XML Web Services의 XML Serialization 및 인코딩된 SOAP Serialization을 제어하는 특성을 참조하십시오.
이 표에서는 SOAP 인코딩된 XML serialization과 연관된 작업을 나열합니다.
작업 |
참조 |
---|---|
개체를 SOAP 인코딩된 XML 스트림으로 serialize |
|
SOAP 인코딩된 XML serialization 재정의 |
기본 및 사용자 지정 serialization
serialization은 기본 방식과 사용자 지정 방식의 두 방법으로 수행할 수 있습니다. 기본 serialization에서는 .NET Framework를 사용하여 개체를 자동으로 serialize합니다.
기본 Serialization
기본 serialization의 유일한 요구 사항은 개체에 SerializableAttribute 특성이 적용되어야 한다는 것입니다. NonSerializedAttribute를 사용하면 특정 필드를 serialize하지 않을 수 있습니다.
기본 serialization을 사용할 때는 개체의 버전 관리로 인해 문제가 발생할 수 있으며 이 경우에는 사용자 지정 serialization을 사용하는 것이 좋습니다. 기본 serialization은 serialization을 수행하는 가장 쉬운 방법이지만 프로세스를 세밀하게 제어할 수 없습니다.
사용자 지정 Serialization
사용자 지정 serialization에서는 serialize할 개체와 serialize 방식을 정확하게 지정할 수 있습니다. 클래스는 SerializableAttribute 표시가 되어야 하며 ISerializable 인터페이스를 구현해야 합니다.
개체를 사용자 지정 방식으로 deserialize하려면 사용자 지정 생성자를 사용해야 합니다.
디자이너 serialization
디자이너 serialization은 일반적으로 개발 도구와 연관된 개체 지속성을 포함하는 특수한 형태의 serialization입니다. 디자이너 serialization은 개체 그래프를 나중에 개체 그래프를 복구하는 데 사용할 수 있도록 소스 파일로 변환하는 프로세스입니다. 소스 파일에는 코드, 태그 또는 SQL 테이블 정보가 포함될 수 있습니다. 자세한 내용은 디자이너 serialization 개요를 참조하십시오.