Blog
강의 리뷰
백기선 GoF 디자인 패턴
Behavioral Patterns
Facade

퍼사드 패턴 (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
    • 트랜잭션을 관리할 때 사용하는 인터페이스
    • 다양한 트랜잭션을 관리하는 방식에 대해서 구체적인 구현을 숨긴 일종의 퍼사드 패턴이라고 할 수 있음