-
(Java)파사드 디자인 패턴 - Facade Design PatternJava & Kotlin 2021. 3. 28. 15:53반응형
1. 서론
자바를 이용해 개발할 때 Slf4j를 구현한 Log4j2를 많이 사용합니다. 이때 Slf4j 공식 문서를 보면, 'Facade Pattern'을 이용했다고 합니다. 그래서 Log4j2가 이를 구현해 사용한다고 하는데요.
그래서 Facade Pattern은 뭘까요?
2. 영어사전의 정의
영어는 영어로서 먼저 받아드려야 한다고 생각합니다. 해당 단어의 사전적 의미를 먼저 파악 후 프로그래밍적 측면으로 바라보면 좀 더 쉽다고 생각합니다.
- 빌딩의 표면, 특히 거리 혹은 열린 공간을 바라보고 있는 주요한 정면이
- 덜 좋거나 칭찬할만한 현실을 감추는데 사용하는 바깥을 바라보는 표면
사전에는 위와 같이 정의되어 있습니다. Origin을 보게 되면 French의 face라는 단어에서 왔다는 것을 알 수 있습니다. 주로 건축에서 사용되는 단어 같습니다.
하지만 두 개의 표현을 보게 되면 공통적으로 "어떤 것을 뒤로 숨기고, 좋은 것을 정면에 보여주는 느낌"을 알 수 있습니다.
3. Facade Design Pattern
객체지향(OOP)를 활용한 디자인 패턴 중 하나입니다.
위키피디아에서는 사용성, 가독성을 위해 복잡한 구성들을 한 개의 API 뒤에 가리는 것이라고 합니다. 주로 하나의 Wrapper class를 이용해 다양한 client의 요구를 정의합니다. 즉 client는 단순한 Facade만 보고, 실제 뒤에서 일어나는 다양한 구현들은 가리는 것입니다.
아래의 그림을 보게 되면 client는 오직 Facade만 사용 합니다. 하지만 한 개의 Facade는 사실, 다양한 패키지를 구현하고 있습니다.
즉 뒤쪽에 얼마나 많은 패키지와 클래스들이 사용되고 구현되어 있더라도, Client는 Facade의 doSomething() 메서드만 사용하면 됩니다.
4. 예제
위의 그림은 Shape 인터페이스를 Circle, Rectangle, Square이 구현하고 있습니다. 그리고 ShapeMaker에서 각 클래스들을 인스턴스화 해서 사용하고 있습니다. 최종적으로는 FacadePatternDemo 클래스가 이를 사용합니다.
main 메소드에서는 ShapeMaker의 메서드들만 작성 후 사용하면 됩니다. 각 메서드들은 Shape 인터페이스부터 시작해서 꽤 복잡한 구조로 얽혀 있지만, 사용하는 프로그래머 입장에서는 ShapeMaker의 메서드들만 보고 사용하면 되므로, 훨씬 간단해집니다.
제가 생각하기에는 리모컨 같다는 생각이 듭니다. 리모컨에 다양한 버튼들이 구현되어 있지만, 그 버튼들이 기계속에서 어떤 신호로 어떻게 동작하는지 알지는 못 합니다. 하지만 우리는 음량, 채널 조절 버튼을 알고 사용합니다.
반응형'Java & Kotlin' 카테고리의 다른 글
(Java)for문 / Collection.size() 성능 개선 (0) 2021.04.04 (java)String vs StringBuilder 수행 시간 차이 (4) 2021.03.28 (Java)Arrays.deepToString - 2차원 배열 출력 (0) 2021.03.11 (Java)Comparator 인터페이스 / compare 메소드 (0) 2021.03.04 (Java)ArrayList vs LinkedList 시간 복잡도 (0) 2021.02.22