직렬화(Serialization)는 프로그램 내에서 사용 중인 객체의 상태를 파일이나 스트림으로 변환하여 저장하거나 전송할 수 있게 만드는 과정입니다. C#에서는 BinaryFormatter 클래스의 Serialize() 메서드를 활용해 객체를 손쉽게 직렬화할 수 있습니다.
아래 예제에서는 BinaryFormatter.Serialize(stream, reference) 메서드를 사용하여 샘플 객체를 직렬화하는 과정을 단계별로 살펴보겠습니다.
1. 생성자 정의하기
먼저 직렬화할 Employee 클래스에 필요한 값을 초기화하는 생성자를 정의합니다.
public Employee(int id, string name, int salary) {
this.id = id;
this.name = name;
this.salary = salary;
}이 생성자는 사원 번호(id), 이름(name), 급여(salary) 세 가지 정보를 받아 객체를 초기화하는 역할을 합니다.
2. 파일 스트림과 BinaryFormatter 설정하기
다음으로 직렬화된 데이터를 저장할 파일 스트림을 생성하고, 직렬화를 담당할 BinaryFormatter 객체를 준비합니다.
FileStream fStream = new FileStream("d:\\new.txt", FileMode.OpenOrCreate);
BinaryFormatter bFormat = new BinaryFormatter();FileMode.OpenOrCreate 옵션은 지정한 경로에 파일이 존재하면 열고, 없으면 새로 생성하라는 의미입니다.
3. 객체 생성 후 직렬화 실행하기
이제 Employee 클래스의 인스턴스를 만들고, 앞서 준비한 포맷터를 통해 파일 스트림에 직렬화합니다.
Employee emp = new Employee(001, "Jim", 30000);
bFormat.Serialize(fStream, emp);
위 코드가 실행되면 emp 객체의 모든 상태 데이터가 d:\new.txt 파일에 바이너리 형식으로 저장됩니다.
참고 사항
BinaryFormatter는 간편하지만 보안 취약점이 있는 것으로 알려져 있습니다. 최신 .NET(.NET 5 이상) 환경에서는 보다 안전한 System.Text.Json 또는 DataContractSerializer 사용이 권장되므로, 실무 프로젝트에서는 용도와 환경에 맞게 선택하는 것이 좋습니다.