파사드란

건물의 앞쪽 정면이라는 뜻이라고 한다.

여러개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 경우
중간에 facade 라는 객체를 두고 여기서 제공하는 인터페이스 만을 활용하여 기능을 사용하능 방식이다.

 

 

파사드 패턴을 적용하기 전 사용예제를 보자.
간단히 테스트로 Ftp, Writer, Reader 객체를 만들어 테스트 해보쟈.

아래 예제를 보면 Ftp, Writer, Reader를 모두 Client가 구현하여 처리해야한다.

	// 파사드 패턴 적용 전 사용법
        Ftp ftpClient = new Ftp("www.yunji.com",22, "home/etc");
        ftpClient.connect();
        ftpClient.moveDir();

        Writer writer = new Writer("test.tmp");
        writer.fileConnect();
        writer.write();

        Reader reader = new Reader("text.tmp");
        reader.fileConnect();
        reader.fileRead();

        reader.fileDisconnect();
        writer.fileDisconnect();
        ftpClient.disconnect();

 

이를 보완하여 Sftp라는 중간 facade 객체를 두어 client는 Sftp만 이용해서 해당 처리를 할 수 있도록 해보자.

 

public class SftpClient {
    private Ftp ftp;
    private Reader reader;
    private Writer writer;

    public SftpClient(Ftp ftp, Reader reader, Writer writer){
        this.ftp = ftp;
        this.reader = reader;
        this.writer = writer;
    }

    //오버로딩
    public SftpClient(String host, int port, String path, String fileName){
        this.ftp = new Ftp(host,port,path);
        this.reader = new Reader(fileName);
        this.writer = new Writer(fileName);
    }

    public void connect(){
        ftp.connect();
        ftp.moveDir();
        writer.fileConnect();
        reader.fileConnect();
    }

    public void disconnect(){
         writer.fileDisconnect();
         reader.fileDisconnect();
         ftp.disconnect();
    }

    public void read(){
        reader.fileRead();
    }

    public void write(){
        writer.write();
    }

}

 

위의 파사드 패턴으로 구현한 Sftp를 이용해서 다시 적용해보자.

 

        // 파사드 패턴 적용 후 사용법
        SftpClient sftpClient = new SftpClient("www.yunji.com",22,"home/etc","test.tmp");

        sftpClient.connect();
        sftpClient.write();
        sftpClient.read();
        sftpClient.disconnect();

 

코드 역시 확실히 간단하게 확인할 수 있고 이를 사용하는 client 또한 명확하게 작업을 끝낼 수 있다.
복잡한 관계가 있을 경우 이렇게 사용할 수 있도록 알아두도록 하자.

 

 

 

참고

- 패스트캠퍼스 예상국 Backend Developer님 강의(Spring초격차)

+ Recent posts