728x90

프로그램을 작성하다보면 여러 알고리즘, 모듈을 설계하게 되는데 구체적인 구현은 다르더라도 기본 골격은 비슷한 경우가 많습니다. 이럴 때는 공통적인 부분들은 동일하게 가져가고 다른 부분만 각각에서 구현하게 됩니다. 이렇게 각각의 알고리즘에서 전체 과정에 대한 알고리즘을 쉽게 관리하면서 세부적으로 달라지는 부분에 대한 수정을 용이하게 하는 방법에 대해 소개합니다.

 

HTTP와 SMTP 클라이언트 프로그램을 예로 들면 주고받는 메시지의 내용만 다를뿐 기본적인 동작은 같습니다. 두 클라이언트를 독립적으로 구현하게 되면 각 다른 동작뿐 아니라 공통적인 부분도 반복적해서 구현하게 됩니다. 동일한 처리 과정에 해당하는 모듈인 하나로 합쳐서 작성하고 다른 부분은 각자의 클래스에서 구현하도록 하게 해야 합니다.

 

두 클라이언트 클래스는 하나의 공통 클래스로부터 상속받게 하고 공통 클래스에서 공통적으로 수행하는 부분을 구현해주고 각 클라이언트마다 다른 부분은 가상함수로 정의해 하위 클래스에서 정의하도록 하면 됩니다.

class InternetClient {
    void Doservice() {
        int sock;
        string req = MakeRequest();
        if ((sock=ConnectToServer(serverName, port) < 0) { return ; }
        SendRequest(sock, req);
        string rsp = RecvResopnse(sock);
        ProcessResponse(rsp);
    }
    virtual string MakeRequest() = 0;
    virtual void ProcessResponse(string rsp) = 0;
};

class HTTPClient : public InternetClient {
    string MakeRequest() { 
        string req;
        // http request 문자열 생성
        return req;
    }
    void ProcessResponse(string rsp) {
        // 응답 문자열 처리
    }
};

class SMTPClient : public InternetClient {
    string MakeRequest() { 
        string req;
        // SMTP request 문자열 생성
        return req;
    }
    void ProcessResponse(string rsp) {
        // 발신 결과 처리
    }
};
728x90

'Programming > C++' 카테고리의 다른 글

[Effective C++] 1. C++에 왔으면 C++의 법을 따릅시다.  (0) 2022.10.24
C++ 방문자 패턴  (0) 2021.06.20
c++ 전략 패턴  (0) 2021.06.20
C++ 상태 패턴  (0) 2021.06.13
C++ 옵저버 패턴  (0) 2021.06.13

+ Recent posts