Computer Science

Facade Pattern | 퍼사드 패턴

연_우리 2022. 8. 16. 22:01
반응형

목차

     

     

     

     

    어떤 상황에서 쓰일까?

    일상생활에서 전등을 킬때, 우리는 스위치 하나만 누르면 된다

    스위치를 눌렀을 때 어떤 과정을 거쳐서 전등이 켜지는지 클라이언트 입장에서 알 필요가 있을까? 전혀없다

    퍼사드 패턴도 마찬가지이다!

     

     

    퍼사드 패턴이란?

    클라이언트가 사용해야하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화 하는 패턴이다

     

    퍼사드 패턴은 클라이언트 애플리케이션의 헬퍼 역할일 뿐이지,

    서브시스템 인터페이스를 숨기는 것은 아니다!

     

    또한 퍼사드패턴은 서브시스템을 여러 곳에서 사용할 때 적용하면 이점이 있는 패턴이다!

     

     

    장점

    - 서브 시스템에 대한 의존성을 한곳으로 모을 수 있다

    - 서브 시스템을 각 역할에 맞게 분리하여 재사용할 수 있다

     

     

    단점

    - 클라이언트에게 있던 의존성이 그대로 퍼사드 클래스로 옮겨오게된다.

     

     

    구현코드

    기존코드

    public class Client {
    
        public static void main(String[] args) {
            String to = "keesun@whiteship.me";
            String from = "whiteship@whiteship.me";
            String host = "127.0.0.1";
    
            //메일 셋팅 설정
            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("Test Mail from Java Program");
                message.setText("message");
    
                Transport.send(message);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    }

    클라이언트는 메일을 보내기만 하면된다!

    설정에 대한 부분을 굳이 클라이언트 단에 노출시키지 않아도 된다.

     

     

    변경코드

    @Getter @Setter
    public class 💚EmailSettings {
        private String host;
    }
    -------------------------------------------------
    @Getter @Setter
    public class 💙EmailMessage {
        private String from;
        private String to;
        private String cc;
        private String bcc;
        private String subject;
        private String text;
    }
    public class EmailSender {
    
        private EmailSettings emailSettings;
    
        public EmailSender(💚EmailSettings emailSettings) {
            this.emailSettings = emailSettings;
        }
    
        /**
         * 이메일 보내는 메소드
         * @param emailMessage
         */
        public void sendEmail(💙EmailMessage emailMessage) {
            Properties properties = System.getProperties();
            properties.setProperty("mail.smtp.host", emailSettings.getHost());
    
            Session session = Session.getDefaultInstance(properties);
    
            try {
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(emailMessage.getFrom()));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailMessage.getTo()));
                message.addRecipient(Message.RecipientType.CC, new InternetAddress(emailMessage.getCc()));
                message.setSubject(emailMessage.getSubject());
                message.setText(emailMessage.getText());
    
                Transport.send(message);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    
    
    }
    public class Client {
    
        public static void main(String[] args) {
            💚EmailSettings emailSettings = new EmailSettings();
            emailSettings.setHost("127.0.0.1");
    
            💙EmailMessage emailMessage = new EmailMessage();
            emailMessage.setFrom("keesun");
            emailMessage.setTo("whiteship");
            emailMessage.setCc("일남");
            emailMessage.setSubject("오징어게임");
            emailMessage.setText("밖은 더 지옥이더라고..");
    
            EmailSender emailSender = new EmailSender(💚emailSettings);
            emailSender.sendEmail(💙emailMessage);
        }
    }

     

     

    반응형
    • 네이버 블러그 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 구글 플러스 공유하기
    • 카카오톡 공유하기