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 |