퍼사드(Facade)패턴
1. 퍼사드(Facade)패턴이란?
Facade 패턴은 객체 지향 소프트웨어 디자인에서 사용되는 구조적 디자인 패턴 중 하나이다.
퍼사드 패턴은 캡슐화를 통해 복잡한 시스템을 단순화하는 디자인 패턴으로 복잡한 서브시스템에 대한 간략화된 인터페이스를 제공하여 클라이언트가 해당 시스템을 더 쉽게 사용할 수 있도록 돕고, 클라이언트가 복잡한 시스템의 내부 동작을 이해할 필요 없이 간단한 인터페이스를 통해 시스템을 사용할 수 있도록 돕는다. 퍼사드는 이러한 복잡성을 숨기고 클라이언트에게 간소화된 접근 방법을 제공하여 시스템을 사용하기 쉽게 만든다.
2. Facade 패턴의 장단점
- 장점
- 클라이언트와 서브시스템 간의 결합도를 낮춘다.
- 복잡한 서브시스템을 숨기고 클라이언트에게 간략한 인터페이스를 제공하여 코드를 더 쉽게 이해할 수 있게 한다.
- 클라이언트가 서브시스템의 변경에 영향을 받지 않도록 한다.
- 단점
- 새로운 기능을 추가할 때 Facade 클래스를 수정이 필요할 수 있다.
- 서브시스템의 모든 기능을 사용할 수 없을 수 있다.
3. Facade 패턴을 사용하는 이유
- 복잡한 시스템을 간소화하여 클라이언트가 더 쉽게 사용할 수 있다.
- 시스템의 내부 구현을 숨겨 클라이언트가 직접 접근하지 않는다.
- 시스템의 변경이 클라이언트에게 영향을 미치지 않는다.
4. Facade 패턴 예시
사실 처음보면 위 설명을 봐도 이해가 되지 않는다. 예시를 하나 들어보자.
가상의 회사: [민민컴퍼니]를 예시로 들어보자.
민민컴퍼니는 직원들의 출퇴근 시간을 관리하는 시스템을 가지고 있다.
이 시스템은 로그인, 로그아웃, 출근 기록, 퇴근 기록 등의 작업을 처리한다고 했을 때, 이 시스템을 Facade 패턴을 활용하여 구현해보자면 아래와 같은 느낌이다.
// 직원 클래스
class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// 출퇴근 관리 시스템
class AttendanceSystem {
public void login(Employee employee) {
System.out.println(employee.getName() + "님이 로그인했습니다.");
}
public void logout(Employee employee) {
System.out.println(employee.getName() + "님이 로그아웃했습니다.");
}
public void recordAttendance(Employee employee, String status) {
System.out.println(employee.getName() + "님이 " + status + "했습니다.");
}
}
// Facade 클래스
class AttendanceFacade {
private AttendanceSystem attendanceSystem;
public AttendanceFacade() {
this.attendanceSystem = new AttendanceSystem();
}
public void clockIn(Employee employee) {
attendanceSystem.login(employee);
attendanceSystem.recordAttendance(employee, "출근");
}
public void clockOut(Employee employee) {
attendanceSystem.recordAttendance(employee, "퇴근");
attendanceSystem.logout(employee);
}
}
// 클라이언트
public class Main {
public static void main(String[] args) {
// 직원 생성
Employee employee1 = new Employee("John");
Employee employee2 = new Employee("Alice");
// Facade를 통해 출퇴근 관리
AttendanceFacade attendanceFacade = new AttendanceFacade();
// 출근
attendanceFacade.clockIn(employee1);
attendanceFacade.clockIn(employee2);
// 퇴근
attendanceFacade.clockOut(employee1);
attendanceFacade.clockOut(employee2);
}
}
위의 예시에서 직원(Employee) 클래스는 각 직원의 이름을 저장하고, 출퇴근 관리 시스템(AttendanceSystem)은 출퇴근과 관련된 작업을 처리한다. 그리고 Facade 클래스(AttendanceFacade)는 출퇴근 관련 작업을 간략하게 처리하는 인터페이스를 제공한다.
클라이언트는 Facade를 통해 간단하게 출근 및 퇴근 기록을 할 수 있다. Facade 클래스는 복잡한 출퇴근 관리 시스템의 내부 동작을 숨기고, 클라이언트에게 간소화된 인터페이스를 제공하여 사용성을 향상시킨다.
Facade에서 얻을 수 있는 장점으로는 복잡성 감소, 코드 재사용 및 유지 보수 용이성, 낮은 결합도가 있다.
즉, Facade를 사용함으로써 시스템의 복잡성을 감소시키고 클라이언트와 내부 시스템 간의 결합도를 낮춰 유지 보수성과 확장성을 향상시킬 수 있다.
'디자인패턴' 카테고리의 다른 글
[디자인패턴] 싱글톤 패턴(Singleton Pattern)이란? | 민민의 하드디스크 - 티스토리 (0) | 2024.01.30 |
---|