더북(TheBook)

템플릿 버전 Serialize()는 데이터를 템플릿 매개변수로 받아 하위 클래스의 Serialize(), 즉 포인터와 길이를 받는 버전을 호출하여 읽기나 쓰기를 수행한다. 이로써 커스텀 Read()Write()를 각각 따로 만들지 않고 묶어서 하나의 Serialize() 가상 함수로 대체할 수 있게 되었다. 커스텀 Serialize() 함수는 MemoryStream만 받아 그 스트림의 가상 Serialize() 함수를 호출하면 된다. 이렇게 하면 커스텀 클래스가 추가될 때 하나의 멤버 함수로 읽기와 쓰기를 모두 처리하여 입력과 출력을 다루는 코드가 서로 어긋나는 실수를 방지할 수 있다.

warning!

이 구현 방식에선 가상 함수 호출이 일어나 앞서 방식보다 다소 비효율적일 수 있다. 가상 함수 대신 템플릿을 잘 쓰면 성능을 만회할 수도 있는데, 이는 연습 과제로 남겨두고자 한다.

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