파사드 패턴이 뭐야?

김재연·2024년 1월 3일
0

파사드 디자인 패턴의 정의

파사드 패턴은 일련의 저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어주는 패턴입니다.

파사드 패턴에서는 고수준 인터페이스를 저수준 인터페이스를 통합했다 해서 '통합 인터페이스' 라고도 부릅니다.

파사드 패턴을 활용하여 해결하는 방법

참고한 블로그에 따르면 커피를 만드는 과정에 대해서 예를 들어주셨습니다.

커피를 만들기 위해서는 여러 과정이 필요할 것이고

이 과정들을 다음과 같이 코드로 정리할 수 있을 것 같아요.

public record Person(
	Refrigerator refrigerator,
	Grinder grinder,
	Filter filter,
	WaterPurifier waterPurifier
) {

	public Coffee makeCoffe() {
		CoffeeBean coffeeBean = refrigerator.getCoffeeBean(); // 냉장고에서 커피콩 꺼내기
		GrinderCoffeeBean grindedCoffeeBean = grinder.grindCoffeeBean(coffeeBean); // 커피 갈기
		filter.put(grindedCoffeeBean); // 커피를 필터 위에 놓기
		HotWater hotWater = waterPurifier.getHotWater() // 뜨거운 물 뽑기
		Coffee coffee = putWaterToFilter(filter, hotWater); // 커피 만들기
		return coffee;
	}
	
}

위와 같이 코드를 정의할 수 있겠죠.

이렇게 되면 Person 클래스는 위 모든 4가지 객체들과 연관성을 띄면서 커리를 만들어내야해요.

그렇다면, 만일 해당 Coffee 가 많이 필요하다면 어떻게 될까요?

중복 있는 코드가 많이 발생하게 되고, 추후 유지보수를 어렵게 만들지 않을까요?

또한, 수 없이 많은 코드들이 생성되면서 실수가 유발되기 쉽지 않을까요?

이렇게 많은 객체들이 의존성을 갖게 되기 때문에 문제가 생길 수 밖에 없는 것이에요.

그렇기 이를 아래와 같이 정의할 수 있을 것 같아요.

public interface CoffeeMaker {

	Coffee makeCoffee();

}

public record CoffeeMakerImpl(
	Refrigerator refrigerator,
	Grinder grinder,
	Filter filter,
	WaterPurifier waterPurifier
) implements CoffeeMaker {

	@Override
	public Coffee makeCoffe() {
		CoffeeBean coffeeBean = refrigerator.getCoffeeBean(); // 냉장고에서 커피콩 꺼내기
		GrinderCoffeeBean grindedCoffeeBean = grinder.grindCoffeeBean(coffeeBean); // 커피 갈기
		filter.put(grindedCoffeeBean); // 커피를 필터 위에 놓기
		HotWater hotWater = waterPurifier.getHotWater() // 뜨거운 물 뽑기
		Coffee coffee = putWaterToFilter(filter, hotWater); // 커피 만들기
		return coffee;
	}
	
}

class Person(
	CoffeeMaker coffeeMaker
) {

	public Coffee makeCoffee() {
		return coffeeMaker.makeCoffee();
	}
	
}

어때요? 위 코드에서 보면 알 수 있듯이, Person 이 엄청 간결해지지 않았나요?

또한 간결해진 것 뿐만 아니라, 낮은 객체레벨을 주입받지 않음에 따라 내부 구현에 영향을 받지 않게 되었어요.

하지만 여전히 CoffeeMakerImpl 은 영향을 받기는 하죠.

하지만, 이를 사용하는 이들을 모두 고치는 것보다는 CoffeeMakerImpl 하나만 고치는 것이 당연히 낫지 않겠어요?

이런 식으로 저수준 인터페이스들을 고수준 인터페이스 하나로 묶으면서 강한 결합도를 떨어뜨릴 수 있게되었어요!

파사드 패턴의 장점과 문제점

장점은 앞에서 다룬 점들이에요.

그렇기 때문에 생략하고, 문제점은 파사드 패턴을 사용하면 고수준 객체가 너무 복잡해진다는 것이에요.

그렇기 때문에, 고수준 객체에 넣어야 하는 저수준 객체들 또한 최대한 간단하게 만들어 넣는 방식으로 설계해야지, 파사드 패턴의 복잡도를 줄일 수 있다고 해요!

우리는 이를 잘 판단하여서 파사드 패턴을 적용해보도록하죠!

참고 자료

https://kotlinworld.com/372

profile
끊임없이 '성장'하는 개발자 김재연입니다.

0개의 댓글