더북(TheBook)

4.5.2 데이터 주도 직렬화

대부분 직렬화 코드가 하는 일엔 공통된 패턴이 있다. 객체의 클래스에 선언된 각 멤버 변수마다 그 값을 하나씩 직렬화한다는 패턴이다. 최적화가 들어가면 조금씩 달라지긴 하지만 일반적인 코드 구조는 대개 이런 식이다. 사실 너무 비슷하다 보니 객체에 어떤 멤버 변수가 있는지 어떤 식으로든 런타임에 검출만 할 수 있다면, 미리 만들어둔 하나의 직렬화 함수만 있으면 대부분 직렬화가 가능할 정도이다.

C#이나 자바 같은 언어는 내장 리플렉션(reflection) 시스템이 있어서 런타임에 클래스 구조 정보를 조회할 수 있다. 그러나 C++에서는 클래스 멤버 정보를 런타임에 조회하는 것이 불가능하며, 관련 체계를 직접 구축해야 한다. 다행히도 코드 4-8처럼 기본적인 리플렉션 시스템을 만드는 게 엄청나게 어려운 일은 아니다.15

 


 

15  역주 대신 엄청나게 귀찮은 것이 문제. 하루빨리 C+ +에도 리플렉션이 도입되었으면 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.