Facade Pattern - dnwls16071/Backend_Summary GitHub Wiki

πŸ“š Facade Pattern μ„€λͺ…

  • Facade : μ—¬λŸ¬ μš”μ†Œλ“€λ‘œ 이루어진 μ‹œμŠ€ν…œμ„ ν•˜λ‚˜μ˜ 창ꡬλ₯Ό 톡해 κ°„λ‹¨ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“  νŒ¨ν„΄

πŸ“š Facade Pattern 예제 μ½”λ“œ 직접 μž‘μ„± 및 흐름 이해

[Ex1]

// 각 ν΄λž˜μŠ€λ“€μ„ μƒμ„±μžλ‘œ μ΄ˆκΈ°ν™”
// ν΄λΌμ΄μ–ΈνŠΈκ°€ 각 클래슀의 쑴재 μ—¬λΆ€λ₯Ό λͺ°λΌλ„ SmartHomeFacadeλΌλŠ” ν•˜λ‚˜μ˜ "창ꡬ"λ₯Ό 톡해 μ†Œν†΅ν•  수 μžˆλ‹€.
public class SmartHomeFacade {
    private Thermostat thermostat;
    private Lights lights;
    private CoffeeMaker coffeeMaker;

    public SmartHomeFacade(
        Thermostat thermostat, Lights lights, CoffeeMaker coffeeMaker
    ) {
        this.thermostat = thermostat;
        this.lights = lights;
        this.coffeeMaker = coffeeMaker;
    }

    public void wakeUp() {
        System.out.println("Waking up...");
        thermostat.setTemperature(22);
        lights.on();
        coffeeMaker.brewCoffee();
    }

    public void leaveHome() {
        System.out.println("Leaving home...");
        thermostat.setTemperature(18);
        lights.off();
    }
}

[Ex2]

class FileSystemFacade {
    private FileReader fileReader;
    private FileWriter fileWriter;
    private FileDeleter fileDeleter;

    public FileSystemFacade() {
        this.fileReader = new FileReader();
        this.fileWriter = new FileWriter();
        this.fileDeleter = new FileDeleter();
    }

    public String readFile(String filePath) {
        try {
            return fileReader.readFile(filePath);
        } catch (IOException e) {
            System.err.println("Error reading file: " + e.getMessage());
            return null;
        }
    }

    public boolean writeFile(String filePath, String content) {
        try {
            fileWriter.writeFile(filePath, content);
            return true;
        } catch (IOException e) {
            System.err.println("Error writing file: " + e.getMessage());
            return false;
        }
    }

    public boolean deleteFile(String filePath) {
        try {
            fileDeleter.deleteFile(filePath);
            return true;
        } catch (IOException e) {
            System.err.println("Error deleting file: " + e.getMessage());
            return false;
        }
    }
}
  • 핡심 정리) Facade ν΄λž˜μŠ€κ°€ λ‚΄λΆ€μ μœΌλ‘œ μ„œλΈŒμ‹œμŠ€ν…œλ“€μ˜ κ°μ²΄κΉŒμ§€ 직접 μƒμ„±ν•΄μ„œ 닀루기 λ•Œλ¬Έμ— 이 Facade 객체만 가지고도 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›ν•˜λŠ” μž‘μ—…μ„ λͺ¨λ‘ μ²˜λ¦¬ν•  수 μžˆλŠ” 것이닀.