4.5.1 직렬화 읽기와 쓰기를 하나로 합치기
앞 절에선 새로운 자료형을 추가할 때마다, 새로운 압축 기법을 구현할 때마다, 읽기와 쓰기 함수 둘 다 수정해야 했다. 그래서 새 기능을 구현할 때 함수를 두 개씩 구현해야 할뿐더러, 쌍을 이루는 두 함수의 아귀가 잘 맞아야 한다. 멤버 변수를 기록하는 방식을 바꿨다면 읽어 들이는 방식도 바꿔야 한다. 이렇게 꽉 짜여진 함수들을 각 자료형마다 유지하는 건 꽤 당혹스러운 경험일지 모른다. 자료형마다 읽기와 쓰기를 두 개의 함수로 나누는 대신 하나로 합쳐 관리할 수 있다면 더 깔끔하지 않을까.
다행히도 상속과 가상 함수를 이용하면 이는 충분히 가능한 일이다. 구현 방법 중 한 가지는 OutputMemoryStream과 InputMemoryStream의 공통 상위 클래스 MemoryStream 클래스를 두어 여기에 Serialize() 가상 멤버 함수를 추가하는 것이다.