C#

[C#] 직렬화 (Serialization)

윤창범 2021. 11. 12.

직렬화

  • 직렬화는 클래스의 객체를 바이너리화하는 것
    => 클래스 내부에 있는 데이터, 변수 등의 값들을 byte 형식의 데이터로 만드는 것
  • 쉽게 말하면 클래스 객체의 상태를 그대로 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정
    => 데이터 파일 형태로 영구 저장 장치에 저장함

< 출처 : https://bravenamme.github.io/2020/02/05/java-serializable/ >

 

< 출처 : https://medium.com/@lunay0ung/basics-%EC%A7%81%EB%A0%AC%ED%99%94-serialization-%EB%9E%80-feat-java-2f3eb11e9a8 >


먼저 알아야 할 내용

기본적으로 C# 환경에서는 데이터 형식을 스트림에 쓰고 읽을 수 있도록 관련 메서드가 제공된다.

(BinaryWriter/Reader 와 StreamWriter/Reader)

 

하지만 복합 데이터 형식을 기록하고 읽으려면, 그 형식이 갖고 있는 필드의 값을 순서에 따라 저장하고 읽는 코드를 작성해야 한다.

 

그래서 C# 환경에서 복합 데이터 형식을 쉽게 읽기 / 쓰기 할 수 있는 직렬화 (Serialization) 메커니즘을 제공한다.

 

.NET 환경에서는 0과 1의 순서로 구성되는 이진 (Binary) 형식과 JSON 및 XML 과 같은 텍스트 형식으로도 직렬화를 지원한다.

 

* 위의 내용은 참고자료에서 인용된 내용이 포함됨


선언 & 사용 방법

객체를 직렬화하는 방법은 매우 간단하다.

[Serializable] Attribute (속성) 을 클래스 선언부 앞에 붙여주면 메모리나 영구 저장 장치에 저장이 가능해진다.

 

예제와 주의할 점까지 잘 정리된 참고자료 블로그가 있어서, 다음의 링크를 참고하는게 좋을 것 같다.

 

https://nomad-programmer.tistory.com/211

 

[Programming/C#] 객체 직렬화 (Serialization)

BinaryWriter/Reader 와 StreamWriter/Reader는 기본 데이터 형식을 스트림에 쓰고 읽을 수 있도록 메소드를 제공한다. 하지만 프로그래머가 직접 정의한 클래스나 구조체 같은 복합 데이터 형식은 지원하

nomad-programmer.tistory.com


마무리

  • 메모리에 있을 내용을 그대로 byte 형식으로 변환한 것이기 때문에 직접 데이터를 메모장으로 열어본다면 이해하기 어려움
  • JSON 이나 XML 과 같은 텍스트 형식의 데이터와 달리, 데이터가 쉽게 유실되거나 없어지는 문제가 발생할 수도 있음
  • Unity 로 게임을 개발하는 경우에는 ScriptableObject 를 활용해보는 것이 좋음
  • 참고자료1
  • 참고자료2

'C#' 카테고리의 다른 글

[C#] 구조체 (Struct)  (0) 2021.10.22
[C#] 얕은 복사와 깊은 복사 (Shallow Copy & Deep Copy)  (0) 2021.10.15

댓글