코드 저장소.

[디자인 패턴] 퍼사드 패턴 본문

ComputerScience/디자인 패턴

[디자인 패턴] 퍼사드 패턴

slown 2024. 6. 14. 00:03

목차

1.퍼사드 패턴?
2.퍼사드 패턴 특징
3.구현

 

1.퍼사드 패턴?

퍼사드(Facade) 패턴은 소프트웨어 디자인 패턴 중 하나로, 복잡한 시스템의 인터페이스를 단순화하는 데 사용됩니다. 퍼사드 패턴은 하나 이상의 클래스에 대한 접근을 단순화하는 인터페이스를 제공하여, 클라이언트 코드가 더 쉽게 시스템과 상호작용할 수 있도록 합니다. 이 패턴은 특히 복잡한 서브시스템이 많은 경우 유용하며, 서브시스템 간의 결합도를 줄이고 코드의 유지보수를 용이하게 합니다.

2.퍼사드 패턴 특징

1. 단순화된 인터페이스 제공

 

퍼사드 패턴은 복잡한 서브시스템에 대해 단순화된 인터페이스를 제공하여 클라이언트가 더 쉽게 시스템과 상호작용할 수 있도록 합니다. 클라이언트는 여러 서브시스템 클래스를 직접 사용할 필요 없이, 퍼사드를 통해 필요한 기능을 간편하게 호출할 수 있습니다.

 

2. 서브시스템과 클라이언트 간의 결합도 감소

 

퍼사드는 클라이언트와 서브시스템 간의 결합도를 줄여줍니다. 클라이언트는 퍼사드를 통해 서브시스템과 상호작용하기 때문에, 서브시스템의 변경 사항이 클라이언트에 미치는 영향을 최소화할 수 있습니다.

 

3. 코드 유지보수성 향상

 

퍼사드 패턴을 사용하면 코드의 유지보수가 용이해집니다. 서브시스템의 복잡한 논리를 퍼사드 뒤에 숨길 수 있으므로, 서브시스템의 변경이나 확장이 클라이언트 코드에 미치는 영향을 줄일 수 있습니다. 클라이언트는 퍼사드 인터페이스만 신경 쓰면 되므로, 전체 시스템의 복잡도가 줄어듭니다.

 

4. 서브시스템의 분리

 

퍼사드 패턴은 서브시스템 간의 상호작용을 관리하고 조정하는 데 도움이 됩니다. 이는 서브시스템들이 독립적으로 개발되고 테스트될 수 있도록 지원하며, 시스템의 모듈화를 촉진합니다.

 

5. 퍼사드는 서브시스템의 일부가 아님

 

퍼사드 클래스는 서브시스템의 일부가 아니며, 단지 클라이언트를 위해 서브시스템의 기능을 제공하는 역할을 합니다. 서브시스템은 퍼사드의 존재를 알지 못하며, 이는 퍼사드가 클라이언트와 서브시스템 간의 중재자 역할을 한다는 것을 의미합니다.

 

6. 성능 향상

 

퍼사드 패턴은 서브시스템의 기능 호출을 최적화할 수 있습니다. 필요한 경우 퍼사드는 서브시스템의 여러 호출을 하나로 묶거나, 불필요한 호출을 생략하여 성능을 향상시킬 수 있습니다.

 

7. 클라이언트 코드의 단순화

 

퍼사드 패턴은 클라이언트 코드의 단순화에 기여합니다. 클라이언트는 퍼사드를 통해 간단한 메서드 호출만으로 복잡한 서브시스템의 기능을 사용할 수 있으므로, 클라이언트 코드가 더 간결하고 이해하기 쉬워집니다.

3.구현

퍼사드 패턴을 구현하는 예제로 은행 시스템을 예로 들어보겠습니다. 그리고 퍼사드 패턴에서 사용되는 구성요소는 다음과 같습니다. 

  • 퍼사드(Facade): 클라이언트가 사용하기 쉬운 간단한 인터페이스를 제공하는 클래스.
  • 서브시스템 클래스(Subsystem classes): 복잡한 기능을 실제로 구현하는 클래스들.

서브시스템 클래스들

먼저 각 서브시스템 클래스를 정의합니다.

 

class AccountService {
    public void getAccount(String accountId) {
        System.out.println("Getting the account of ID: " + accountId);
    }
}

class LoanService {
    public void getLoan(String accountId) {
        System.out.println("Getting the loan information for account ID: " + accountId);
    }
}

class CreditService {
    public void getCredit(String accountId) {
        System.out.println("Getting the credit information for account ID: " + accountId);
    }
}

 

퍼사드 클래스

이제 퍼사드 클래스를 정의합니다.

class BankServiceFacade {
    private AccountService accountService;
    private LoanService loanService;
    private CreditService creditService;

    public BankServiceFacade() {
        this.accountService = new AccountService();
        this.loanService = new LoanService();
        this.creditService = new CreditService();
    }

    public void getBankServices(String accountId) {
        accountService.getAccount(accountId);
        loanService.getLoan(accountId);
        creditService.getCredit(accountId);
    }
}

 

클라이언트 코드

마지막으로 클라이언트 코드를 작성합니다.

public class Client {
    public static void main(String[] args) {
        BankServiceFacade bankServiceFacade = new BankServiceFacade();
        bankServiceFacade.getBankServices("12345");
    }
}