1. 퍼사드 패턴이란?
- 복잡한 객체 구조에 대한 간략화된 인터페이스를 클라이언트에게 제공하는 패턴
- 사용자가 굳이 알아야 할 필요가 없는 내부 구조 등을 숨기는 패턴
- 클래스 라이브러리와 같은 대규모의 코드를 사용하기 위한 간략한 인터페이스를 제공하는 패턴
- 어떤 서브시스템의 인터페이스에 대한 통합된 인터페이스를 제공하는 패턴
- '건물의 정면' 이라는 ' Facade'의 뜻처럼, '복잡한 시스템의 앞면' 이라는 의미로 사용된다.
2. 퍼사드 패턴을 사용하는 경우
- 수십 가지의 기능이 있는 정교한 라이브러리와 통합해야 하지만 그 기능의 극히 일부만을 필요로 하는 경우
- 하위시스템의 각 계층에 대한 진입점을 정의하기 위해 사용
- 복잡한 시스템을 간편하게 다루고 싶을 때 사용
3. 퍼사드 패턴의 장점
1) 낮은 이해도 : 복잡한 소프트웨어 라이브러리를 쉽게 이해할 수 있다.
2) 캡슐화 : 외부에는 간단한 인터페이스만 노출되고, 내부에서는 복잡한 내용을 일괄적으로 처리해준다.
3) 일괄처리 : 여러개의 클래스의 상호 동작을 묶어서 처리한다.
4) 낮은 결합도 : 사용자가 복잡한 내부절차를 알지 못해도 단순한 인터페이스만으로 시스템 사용이 가능하다.
4. 퍼사드 패턴의 단점
- 퍼사드가 너무 많은 책임을 가지게 되면, 퍼사드 자체가 복잡해지는 문제가 발생할 수 있음.
- 시스템의 세부적인 기능들을 제공하지 못하기 때문에, 복잡한 작업을 하려는 사용자들에게는 제한적일 수 있음.
5. 코드 구현
- 슈퍼세트의 개념을 이용하여 운동 프로그램을 간단하게 구현해 보았다.
- 사용자는 ExerciseStart() 함수의 호출만으로 복잡한 내부 작업을 알 필요없이 사용할 수 있다.
- 소스코드(c#)
using System;
namespace StudyCSharp
{
public class Chest
{
public void BenchPress()
{
Console.WriteLine("가슴\t: 벤치프레스");
}
public void PecdecFly()
{
Console.WriteLine("가슴\t: 펙덱플라이");
}
public void Dips()
{
Console.WriteLine("가슴\t: 딥스");
}
}
public class Back
{
public void PullUp()
{
Console.WriteLine("등\t: 풀업");
}
public void DeadLift()
{
Console.WriteLine("등\t: 데드리프트");
}
public void SitedRow()
{
Console.WriteLine("등\t: 시티드로우");
}
}
// 퍼사드 클래스
public class SuperSet
{
private Chest chest;
private Back back;
public SuperSet()
{
this.chest = new Chest();
this.back = new Back();
}
public void ExerciseStart()
{
Console.WriteLine("운동 시작");
Console.WriteLine();
Console.WriteLine("[슈퍼세트 1]");
this.chest.BenchPress();
this.back.PullUp();
Console.WriteLine();
Console.WriteLine("[슈퍼세트 2]");
this.chest.PecdecFly();
this.back.DeadLift();
Console.WriteLine();
Console.WriteLine("[슈퍼세트 3]");
this.chest.Dips();
this.back.SitedRow();
Console.WriteLine();
Console.WriteLine("운동 끝");
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args)
{
SuperSet superSet = new SuperSet();
superSet.ExerciseStart();
}
}
}
- 실행 결과
<참고 사이트>