이제 출력 메모리 스트림을 사용해 RoboCat 전송 함수를 보다 견고하게 구현할 수 있다.
void RoboCat::Write(OutputMemoryStream& inStream) const { inStream.Write(mHealth); inStream.Write(mMeowCount); // TODO: mHomeBase : 아직 처리 불가 inStream.Write(mName, 128); // TODO: mMiceIndices : 아직 처리 불가 } void SendRoboCat(int inSocket, const RoboCat* inRoboCat) { OutputMemoryStream stream; inRoboCat->Write(stream); send(inSocket, stream.GetBufferPtr(), stream.GetLength(), 0); }
RoboCat에 Write()를 추가하면 이 멤버 함수는 내부 private 필드에 스스로 접근할 수 있으므로 직렬화 코드를 데이터 전송 코드와 분리하여 구현할 수 있다. 또 이런 방식으로 여러 클래스를 추상화하면 스트림에 여러 클래스의 데이터를 섞어서 전송하고자 할 때 서로 다른 인스턴스를 비슷한 방식으로 다룰 수 있게 되어 편리하다. 상세한 내용은 5장에서 설명한다.