본문 바로가기

JAVA/디자인 패턴

[Design Pattern] Facade(퍼사드) 패턴이란?

반응형
구조 패턴(Structural Pattern)


퍼사드(Facade) 패턴은 소프트웨어 디자인 패턴 중 하나로, 복잡한 시스템이나 서브시스템의 인터페이스에 대한 간략한 인터페이스를 제공하여, 시스템의 복잡성을 감소시키는 패턴입니다.

퍼사드 패턴은 시스템 내의 다양한 구성 요소를 캡슐화하는데 사용됩니다. 이 패턴을 사용하면 클라이언트가 시스템의 내부 작업을 직접 다루지 않고, 대신 간단한 인터페이스를 사용하여 시스템과 상호작용할 수 있습니다.

퍼사드 패턴의 핵심 요소는 "퍼사드" 클래스입니다. 이 클래스는 시스템의 복잡한 부분을 캡슐화하고, 간단한 인터페이스를 제공하는 역할을 합니다. 클라이언트는 이 인터페이스를 사용하여 시스템의 서브시스템과 상호작용합니다.

퍼사드 패턴을 사용하면 시스템이 단순화되고 유지보수가 용이해집니다. 또한 시스템의 다른 부분과의 결합도가 낮아지므로, 시스템의 특정 부분을 변경하더라도 전체 시스템에 미치는 영향이 적어집니다.

이 패턴은 대규모 시스템에 유용합니다. 예를 들어, 대규모 시스템의 각 부분은 다양한 인터페이스와 기능을 가지고 있습니다. 이러한 경우, 각각의 서브시스템이나 클래스마다 인터페이스를 만들기보다는, 퍼사드 클래스를 사용하여 간단한 인터페이스를 제공하는 것이 더 효율적입니다.

퍼사드 패턴을 사용하면 시스템이 단순화되고, 유지보수성이 향상되며, 시스템의 확장성과 유연성이 높아집니다. 따라서 이 패턴은 많은 소프트웨어 디자이너와 개발자들에게 중요한 디자인 패턴 중 하나입니다.

 

 

Facade 패턴 예제

Diagrams

 

 

Facade 클래스

 

// 퍼사드 클래스
class FileFacade {
    public String readFile(String fileName) {
        try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
            StringBuilder stringBuilder = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
                stringBuilder.append(System.lineSeparator());
            }
            return stringBuilder.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public void writeFile(String fileName, String content) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            writer.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

클라이언트 코드

 

public class Main {
    public static void main(String[] args) {
        FileFacade fileFacade = new FileFacade();
        String fileName = "test.txt";
        String content = "Hello, World!";

        // 파일 쓰기
        fileFacade.writeFile(fileName, content);

        // 파일 읽기
        String readContent = fileFacade.readFile(fileName);
        System.out.println(readContent);
    }
}

 

위 예제에서는 FileFacade 클래스가 퍼사드 역할을 수행합니다. FileFacade 클래스는 readFile과 writeFile 메서드를 제공하여 파일 입출력을 단순화합니다. 이 클래스는 내부에서 복잡한 파일 입출력 관련 클래스를 사용하며, 이를 캡슐화하여 간단한 인터페이스를 제공합니다.

클라이언트 코드에서는 FileFacade 클래스의 인스턴스를 생성하고, writeFile 메서드를 사용하여 파일에 내용을 쓰고, readFile 메서드를 사용하여 파일 내용을 읽습니다. 클라이언트 코드에서는 파일 입출력과 관련된 복잡한 내용을 알 필요가 없으며, 단순히 FileFacade 클래스의 인터페이스를 사용하여 파일 입출력을 수행할 수 있습니다.

반응형