Facade Pattern 🧙♂️
디자인 패턴이란?
디자인 패턴이란?
- 디자인 패턴은 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제를 자주 쓰이는 설계 방법을 정리한 패턴이다.
- 디자인 패턴을 참고하여 개발하면 효율성과 유지보수성, 운용성이 높아지며, 프로그램 최적화가 된다고 한다.
디자인 패턴을 목적과 범위로 나눌수 있다
구분 | 유형 | 설명 |
---|---|---|
생성 | 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행 | |
목적 | 구조 | 더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴 |
행위 | 클래스나 객체들이 상호작용하는 방법과 역할 분담을 다루는 패턴 | |
범위 | 클래스 | 클래스간 관련성(상속), 컴파일 시 정적으로 결정 |
객체 | 객체 간 관련성을 다루는 패턴, 런타임 시 동적으로 결정 |
Problem
프로젝트 때, 하나의 메서드에서 여러가지 객체들을 호출하는 구조가 있었다.
그러다보니, 코드의 가독성이 떨어지고 여러 객체들이 의존성을 갖게 되기 떄문에 문제가 발생되었다.
이를 해결하기 위해 파사드 패턴을 도입했다.
입금만 가능한 기계, 출금만 가능한 기계가 있는게 아니듯이 하나의 ATM기에서 여러 일을 처리하는 것
Adapter 패턴과의 차이: 다른 인터페이스를 자신의 인터페이스 스타일 대로 변경
파사드 패턴이란?
파사드 패턴
은 하위 객체들을 쉽게 사용할 수 있도록 고수준 객체를 만들어서 문제를 해결하는 패턴이다.
복잡한 시스템에 대하여 단순한 인터페이스를 제공함으로써 사용자와 시스템 간의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게 하는 패턴으로 오류에 대해서 단위별로 확인 할 수있게 하며, 사용자의 측면에서 단순한 인터페이스 제공
을 통해 접근성을 높일 수 있는 디자인 패턴이다.
해당 내용을 이해하기 위해 아래의 코드를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* 저수준 하위 객체들 */
class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}
class Memory {
public void load(long position, byte[] data) {
...
}
}
class HardDrive {
public byte[] read(long lba, int size) {
...
}
}
/* 파사드 역할 */
class Computer {
public void startComputer() {
CPU cpu = new CPU();
Memory memory = new Memory();
HardDrive hardDrive = new HardDrive();
cpu.freeze();
memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
cpu.jump(BOOT_ADDRESS);
cpu.execute();
}
}
/* Client */
class Client {
public static void main(String[] args) throws ParseException {
Computer facade = /* 파사드 인스턴스 */;
facade.startComputer();
}
}
이처럼 하나의 클래스로 저수준의 객체를 모아서 관리하므로써 클라이언트는 컴퓨터만 신경쓰면 되는 구조로 바뀌었다.
필요한 기능만 들어간 단순한 인터페이스를 구현함으로써 문제발생이 줄어듬과 동시에 코드가 명료해진다.
다만, 잦은 파사드 패턴은 하나로 모아 관리하는 객체가 복잡
해진다는 것이다. 따라서 무조건적으로 넣는게 아닌 저수준의 객체들도 최대한 간단하게 설계
해서 만들어야 파사드 패턴의 이점을 가져갈 수 있다.
참고자료
Head First 디자인패턴
면접을 위한 CS 전공지식노트