파사드 패턴이란?
**파사드 패턴(Facade Pattern)**은 객체 지향 디자인 패턴 중 하나로, 서브시스템(여러 개의 클래스로 구성된 복잡한 시스템)을 단순화하고 클라이언트에게 편리한 인터페이스를 제공하기 위해 사용되는 패턴이다. 이 패턴은 복잡한 시스템을 감싸고, 클라이언트가 시스템 내부 구조를 알 필요 없이 간단하게 상호작용할 수 있도록 한다. 즉, 파사드는 중재자 역할을 하며, 클라이언트와 서브시스템 간의 인터페이스 역할을 수행한다.
파사드 패턴은 의존성을 낮춰 결합도를 높이고 코드 유지 보수를 개선하는 데 도움을 준다. 이게 뭘까 어떻게 코드에 적용해서 퀄리티를 높일 수 있을까? 궁금했는데 프로젝트 진행 중에 강사님께 파사드 패턴을 적용해보라는 조언을 받았다!
나의 상황
메인페이지에 카테고리 리스트와 게시글 리스트를 한 번에 주고 싶었다. 그래서 post controller에 categoryService와 DealPostService가 모두 주입되어있는 상황. map<Object>까지 사용해서 설상가상으로 꾸역꾸역 엮은 느낌이 나는 코드였다.
파사드 패턴 적용 후
facadeService에 두 개의 서비를 주입받는다. 그리고 CategoryDto와 DealPostDto를 받는 MainDto도 하나 더 만든다. MainDto를 facadeService에서 가공한 후, 내가 원하는 컨트롤러에서 facadeService를 호출하면 된다.
@Getter @Setter
public class MainPageInfoFacadeDto {
private CategoryListResponseDto categoryDto;
private List<MainPagePostResponseDto> postDto;
}
@Service
@RequiredArgsConstructor
public class MainPageFacadeService {
private final CategoryServiceImpl categoryService;
private final DealServiceImpl dealService;
public MainPageInfoFacadeDto getFacadeDto() {
MainPageInfoFacadeDto dto = new MainPageInfoFacadeDto();
dto.setCategoryDto(categoryService.getCategoryList());
dto.setPostDto(dealService.getDealPostLists());
return dto;
}
}
/**
* @return 카테고리 리스트와 판매중인 게시글
*/
@GetMapping("main")
public ResponseEntity<?> getMainInfo() {
return new ResponseEntity<>(facadeService.getFacadeDto(), HttpStatus.OK);
}
생각보다 어렵지 않았고 재미있었다. 뭔가 유용한 기술 하나 얻은 느낌 ㅎㅎ 매사에 기본기에 충실하면서 코딩하는 것이 중요하다고 생각한다. 재미써!