ํผ์‚ฌ๋“œ ํŒจํ„ด(Facade Pattern)

2024. 7. 8. 22:28ยท๐Ÿ“‚ programming-language/java

1. ํผ์‚ฌ๋“œ ํŒจํ„ด

ํผ์‚ฌ๋“œ ํŒจํ„ด์˜ ๋ชฉ์ ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ณต์žกํ•œ ์„œ๋ธŒ ์‹œ์Šคํ…œ ์˜์กด์„ฑ์„ ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ตฌ์กฐ์  ํŒจํ„ด์ด๋‹ค. ์ฝ”๋“œ ์ž‘์—…์„ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด ์ดˆ๊ธฐํ™”, ์ข…์†์„ฑ ๊ด€๊ณ„ ์ถ”์ , ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ˆœ์„œ์— ๊ด€ํ•œ ๋‚ด์šฉ์— ๊ด€ํ•ด ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋“ค์˜ ์„ธ๋ถ€ ๊ตฌํ˜„ ์‚ฌํ•ญ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›Œ ์ถ”์ƒํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ํผ์‚ฌ๋“œ ํŒจํ„ด์ด๋‹ค.

 

ํผ์‚ฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” loosely coupling ์ด๋‹ค. tight coupling ์€ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๋ณ€๊ฒฝ ์ด์œ ๋„ ๋งŽ๊ณ , ํ…Œ์ŠคํŠธ๋„ ์–ด๋ ต๋‹ค. ์ด๋ฅผ loosely coupling ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ์ถ”์ƒํ™” ๋˜ํ•œ ์ด์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด๋ฉฐ ์„ธ๋ถ€ ๊ตฌํ˜„์„ ๋’ค๋กœ ์ˆจ๊ธฐ๊ณ  ์ฝ”๋“œ ์ง„์ž… ์žฅ๋ฒฝ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

ํผ์‚ฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ธŒ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ํ•œ ๊ณณ์œผ๋กœ ๋ชจ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋‹จ์ ๋„ ์ผ ์ˆ˜ ์žˆ๋‹ค. ์˜คํžˆ๋ ค ์„œ๋ธŒ ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

 

before facade pattern (์ถœ์ฒ˜ : [inflearn] ์ฝ”๋”ฉ์œผ๋กœ ํ•™์Šตํ•˜๋Š” GoF์˜ ๋””์ž์ธ ํŒจํ„ด)

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();
        }
    }
}

 

after facade pattern (์ถœ์ฒ˜ : [inflearn] ์ฝ”๋”ฉ์œผ๋กœ ํ•™์Šตํ•˜๋Š” GoF์˜ ๋””์ž์ธ ํŒจํ„ด)

public class Client {

    public static void main(String[] args) {
        EmailSettings emailSettings = new EmailSettings();
        emailSettings.setHost("127.0.0.1");

        EmailSender emailSender = new EmailSender(emailSettings);

        EmailMessage emailMessage = new EmailMessage();
        emailMessage.setFrom("keesun");
        emailMessage.setTo("whiteship");
        emailMessage.setCc("์ผ๋‚จ");
        emailMessage.setSubject("์˜ค์ง•์–ด๊ฒŒ์ž„");
        emailMessage.setText("๋ฐ–์€ ๋” ์ง€์˜ฅ์ด๋”๋ผ๊ณ ..");

        emailSender.sendEmail(emailMessage);
    }
}

@Getter
@Setter
public class EmailMessage {

    private String from;
    private String to;
    private String cc;
    private String bcc;
    private String subject;
    private String text;
    
}

@Getter
@Setter
public class EmailSettings {

    private String host;
}

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();
        }
    }

}

 

Reference

  • [refactoring] ํผ์‚ฌ๋“œ ํŒจํ„ด : https://refactoring.guru/ko/design-patterns/facade
  • [inflearn] ์ฝ”๋”ฉ์œผ๋กœ ํ•™์Šตํ•˜๋Š” GoF์˜ ๋””์ž์ธ ํŒจํ„ด : https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard
  • [geeksforgeeks] facade-design-pattern-introduction : https://www.geeksforgeeks.org/facade-design-pattern-introduction/?ref=lbp

'๐Ÿ“‚ programming-language > java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž๋ฐ” ๋น„๋™๊ธฐ๋กœ ์นดํŽ˜ ์ฝ˜์†” ์˜ˆ์ œ ๋งŒ๋“ค๊ธฐ  (0) 2024.11.26
์–ด๋Œ‘ํ„ฐ ํŒจํ„ด(adapter pattern)  (1) 2024.07.09
์ปค๋งจ๋“œ ํŒจํ„ด(command pattern)  (0) 2024.07.08
์ฑ…์ž„ ์—ฐ์‡„ ํŒจํ„ด (chain of responsibility pattern)  (1) 2024.07.05
์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(singleton pattern)  (0) 2024.07.03
'๐Ÿ“‚ programming-language/java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์ž๋ฐ” ๋น„๋™๊ธฐ๋กœ ์นดํŽ˜ ์ฝ˜์†” ์˜ˆ์ œ ๋งŒ๋“ค๊ธฐ
  • ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด(adapter pattern)
  • ์ปค๋งจ๋“œ ํŒจํ„ด(command pattern)
  • ์ฑ…์ž„ ์—ฐ์‡„ ํŒจํ„ด (chain of responsibility pattern)
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    JPA
    mysql
    gof
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    react
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    kafka
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    spring camp 2025
    AWS
    spring-batch
    nGrinder
    spring AOP
    ๋™์‹œ์„ฑ
    Redisson
    ํšŒ๊ณ 
    UUID
    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    spring
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
ํผ์‚ฌ๋“œ ํŒจํ„ด(Facade Pattern)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”