본문 바로가기
어쩌면 모두 궁금할지도?

파사드 패턴 적용기

by notcherry 2023. 12. 6.

파사드 패턴이란?

**파사드 패턴(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);
    }

 

 

생각보다 어렵지 않았고 재미있었다. 뭔가 유용한 기술 하나 얻은 느낌 ㅎㅎ 매사에 기본기에 충실하면서 코딩하는 것이 중요하다고 생각한다. 재미써!