퍼사드 패턴 (Facade Pattern)
퍼사드라는 단어는 건물의 입구쪽 전경을 의미한다. 건물 안에 어떤 것이 있는지 세부적으로 알 수 없는 즉, 복잡한 내부 구조를 감추고 단순한 인터페이스만을 제공하는 것이다. Loose Coupling을 위해 사용되며, 서브 시스템을 감추고 클라이언트에게 간단한 인터페이스를 제공한다.
구현
👇 기존 코드
public class Client {
public static void main(String[] args) {
String to = "rookedsysc36@google.com";
String from = "holmes0306@naver.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("This is the Subject Line!");
message.setText("This is actual message");
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
👇 퍼사드 패턴 적용 코드
장단점
- 장점
- 서브 시스템을 한 곳으로 몰아줄 수 있다.
- 단점
- 퍼사드 자체가 서브 시스템에 대한 모든 의존을 가지게 된다.
- 목킹해서 극복 가능
- 퍼사드 자체가 서브 시스템에 대한 모든 의존을 가지게 된다.
퍼사드 패턴(Facade Pattern)이 적용된 Spring 코드
- MailSender 👈 👉 JavaMailSenderImpl
- JavaMailSenderImpl의 구체적인 구현을 숨긴 일종의 퍼사드 패턴이라고 할 수 있음
- ‼️ 하나의 구현에 한 가지 패턴만 적용됐다고 믿으면 안됨
- PlatformTransactionManager 👈 👉 JdbcTransactionManager
- 트랜잭션을 관리할 때 사용하는 인터페이스
- 다양한 트랜잭션을 관리하는 방식에 대해서 구체적인 구현을 숨긴 일종의 퍼사드 패턴이라고 할 수 있음