더북(TheBook)

UDPSocket 클래스에는 세 개의 멤버 함수가 있다. Bind(), SendTo(), ReceiveFrom()이 그것이다. 각각 앞서 구현한 SocketAddress 클래스를 활용하고 있다. SocketAddress 내부에 private으로 선언된 sockaddr 멤버 변수에 접근하기 위해선 SocketAddressUDPSocketfriend 클래스로 선언해 두어야 한다. 이 방식으로 구현하면 모듈 외부에서는 sockaddr을 직접 수정할 수 없지만 모듈 안에서는 자유롭게 이용이 가능하며, 구현도 편해지고 종속성이나 잠재적인 오류도 줄일 수 있어서 좋다.

객체 지향 래퍼 클래스의 장점 중 하나는 바로 소멸자를 만들 수 있다는 것이다. 여기서 ~UDPSocket() 소멸자는 내부 소켓을 자동으로 닫아주어 소켓이 누수되지 않도록 한다.

코드 3-5의 UDPSocket 코드는 오류 보고 용도로 SocketUtil 클래스를 사용한다. 이렇게 오류 보고 코드를 별개로 두어 사용하면 오류 처리 방식을 조정하기 쉬워지며, 플랫폼마다 서로 다른, 예를 들어 윈도의 WSAGetLastError()와 다른 플랫폼의 errno 등 에러 코드 체계를 통합하기 편해진다.

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