파사드란
건물의 앞쪽 정면이라는 뜻이라고 한다.
여러개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 경우
중간에 facade 라는 객체를 두고 여기서 제공하는 인터페이스 만을 활용하여 기능을 사용하능 방식이다.
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/004.gif)
파사드 패턴을 적용하기 전 사용예제를 보자.
간단히 테스트로 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초격차)
'Backend > Java' 카테고리의 다른 글
RESTFul 하다는 건 뭘까? (0) | 2022.04.05 |
---|---|
전략 패턴(Strategy Pattern) 예제 코드로 이해하기 (0) | 2022.04.04 |
옵저버(Observer pattern)패턴 예제 코드로 이해하기 (0) | 2022.04.03 |
데코레이터 패턴(Decorator Pattern) 예제 코드로 이해하기 (0) | 2022.04.03 |
프록시 패턴(Proxy pattern) 예제 코드로 이해하기 (0) | 2022.04.03 |