class AProgram {
func covertFile(_ fileName: String) {
print("\(fileName) 파일을 변환하였습니다")
}
func extractVideo(_ videoFileName: String) {
print("\(videoFileName)을 추출 완료하였습니다")
}
func mixingVideo(_ videoFileName: String) {
print("\(videoFileName)을 믹싱하였습니다")
}
func masteringSound(_ mp3FileName: String) {
print("\(mp3FileName)을 마스터링하였습니다")
}
}
class Facade {
// 대부분의 경우 Facade 객체는 하나만 있어도 충분하다.
// Facade 객체가 한 개일 경우 싱글톤으로 생성하는 것이 좋다. ⭐️⭐️
static let shared = Facade()
// Client가 Subsystem을 직접적으로 알지 못하도록 private 처리 ⭐️⭐️
private let aProgram = AProgram()
func masteringSound(_ mp3FileName: String) {
aProgram.masteringSound(mp3FileName)
}
}
class OurCompany_Client {
let facade = Facade.shared
// Facade를 통해서 Subsystem의 코드를 우리 코드 내에서 사용할 수 있게 되었다!
func masterSound() {
facade.masteringSound("iOS.mp3")
}
}
글을 읽으며 이제껏 인지 없이 사용하고 있던 작성법에 퍼사드 패턴
이라는 명칭이 있었음을 알게 되었습니다!
또 싱글톤을 사용한 예시를 들어주셨는데요, 이전에는 생성자를 private 으로 처리하지 않으면 싱글톤의 의도 (단 한개만 만들겠다)가 망가지는 거 아닌가, 애초에 싱글톤의 의도가 없는 게 아닌가 빡빡하게 생각한 적이 있었습니다.
하지만 다양한 예시를 접하며 (물론, 실제 작업에선 지켜주는 것이 좋다고 생각합니다...!) 그 의도가 통한다면 유연하게 해석하는 것도 힘임을 깨닫습니다.
퍼사드 패턴! 멋진 지식 알려주셔서 감사합니다!
+) 디자인패턴에 관해 정리해 주신 글들 읽으며 Client <- 라는 표기에 적응해 갑니다 ㅎㅎ 다른 분들의 코드를 읽을 때에 그 명칭의 이유가 궁금했었는데... 감사합니다!
파사드(facade)가 프랑스어로 건물의 외관이라는 뜻이래요
그래서 내부가 어떻게 생겼든 외관만 보면 된다는 의미로 파사드 패턴으로 명명했다고 하더라고요
(https://en.wikipedia.org/wiki/Facade_pattern)
“Facade가 단 한 개만 존재할 경우”, 모든 클래스가 접근하기 용이하도록 Facade를 싱글톤으로 구성한다.
이 문장을 좀 더 설명해 주실 수 있을까요?
Facade는 보통 한 인스턴스로 여러군데에서 사용하도록 하나요?