더북(TheBook)

이제 출력 메모리 스트림을 사용해 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);
}

RoboCatWrite()를 추가하면 이 멤버 함수는 내부 private 필드에 스스로 접근할 수 있으므로 직렬화 코드를 데이터 전송 코드와 분리하여 구현할 수 있다. 또 이런 방식으로 여러 클래스를 추상화하면 스트림에 여러 클래스의 데이터를 섞어서 전송하고자 할 때 서로 다른 인스턴스를 비슷한 방식으로 다룰 수 있게 되어 편리하다. 상세한 내용은 5장에서 설명한다.

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