[Design Pattern] 13. Pacade Pattern(퍼사드 패턴) C#
복잡한 여러 클래스들을 단순한 퍼사드 하나로 제공하여 간결하게 만드는 패턴입니다.
구조 패턴(Structural Design Patterns)중 하나이죠.
장점
- 복잡한 하위 시스템을 간결하게 만들 수 있습니다.
단점
- Facade 객체가 모든 걸 다하게 만들어 오히려 악효과가 날 수 있습니다.
C#으로 Console 프로젝트를 하나 생성해서 할 것입니다.
목표는 컴퓨터 실행입니다. 각 프로세서, 램, 디스크를 만들어 컴퓨터를 실행 시키겠습니다.
프로젝트의 tree구조는 아래와 같습니다.
Memento (Project)
|- Program.cs (Main)
|- Processor.cs (Subsystem class)
|- RAM.cs (Subsystem class)
|- Disk.cs (Subsystem class)
|- Computer.cs (Facade class)
RAM.cs
using System;
namespace Facade
{
public class RAM
{
public void Load(long position, byte[] data)
{
Console.WriteLine($"RAM: Load data at {position}");
}
}
}
RAM에서 메모리를 읽어오는 Load메소드를 만들어 줍니다.
Processor.cs
using System;
namespace Facade
{
public class Processor
{
public void Freeze()
{
Console.WriteLine("Processor: Freeze");
}
public void Jump(long position)
{
Console.WriteLine($"Processor: Jump to {position}");
}
public void Execute()
{
Console.WriteLine("Processor: Execute");
}
}
}
Processor는 정지(Freeze), 이동(Jump), 실행(Excute)를 만들어 줍니다.
Disk.cs
using System;
namespace Facade
{
public class Disk
{
public byte[] Read(long position, int size)
{
Console.WriteLine($"Disk: Read {size} bytes at {position}");
return new byte[size];
}
}
}
Disk에서 읽올 수 있게 Read 메소드를 구성해줍니다.
Computer.cs
namespace Facade
{
public class Computer
{
private readonly Processor _processor;
private readonly RAM _ram;
private readonly Disk _disk;
public Computer()
{
_processor = new Processor();
_ram = new RAM();
_disk = new Disk();
}
public void Start()
{
_processor.Freeze();
_ram.Load(0, _disk.Read(0, 1024));
_processor.Jump(0);
_processor.Execute();
}
}
}
하위에 포함된 클래스들(Subsystem classes)을 컴퓨터를 실행시키는 메소드 하나로 묶어 줍니다.
Program.cs
namespace Facade
{
public class Facade
{
static void Main(string[] args)
{
var myComputer = new Computer();
myComputer.Start();
}
}
}
컴퓨터를 만들고 실행(Start)시켜줍니다.
컴퓨터 안에 각 RAM, Disk, Processor를 동작시켜 줍니다.
원하는대로 결과가 출력됨을 확인하실 수 있습니다.
복잡한 시스템 묶어 실행시켜 보다 간결하게 실행할 수 있어 편리한 패턴입니다.
남용하면 의미가 없어지니 주의하여 사용하시면 좋겠습니다.