티스토리 뷰

파사드 패턴(Facade Pattern)

💡 클라이언트에게 파사드(Facade)라는 하나의 인터페이스만 제공해 서브 시스템의 구현을 숨기고 의존성을 낮추는 방법을 제공한다.

 

개요

프랑스 어로 건물의 입구가 위치한 외벽을 가리킨다. 건물은 파사드(Facade)를 통해 외부에서 내부가 정확히 어떻게 생겼는지 알지 못하게 숨기게 되는데, 이는 소프트웨어에서 내부 구현을 숨기고 외부에는 파사드(Facade)만 노출시키는 상황을 예상해 볼 수 있다.

 

객체 모델

 

 

 

👍 장점

  • 서브 시스템을 파사드를 통해 접근하게 구조화 하면 복잡성을 줄일 수 있다.
  • 클라이언트가 가져야할 의존성을 하나로 통합하여 줄일 수 있다(Loose Coupling).

 

🎯 실제 활용

스프링에서 각 레이어간 의존성을 줄이기 위해 파사드(Facade)에 의존성을 통합한다.

 

Before Facade

 

 

 

@RestController
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemRestController {
  private final ItemService itemService;
  private final OrderService orderService;

  @GetMapping("/{itemId}")
  public String getItem(@PathVariable Long itemId) {
    String itemName = itemService.findItem(itemId);
    Long orderNumber = orderService.findOrder(itemId);
    return orderNumber + " : " + itemName;
  }
}

 

🤔 해당 코드는 Controller 에서 서로 다른 서브 도메인( Item, Order )의 서비스 의존성을 가지고 있다. 너무 많은 의존성은 레이어 간의 강한 결합 혹은 변경하기 힘든 코드로 이어질 수 있다.

 

 

After Facade

 

 

// Cotroller
@RestController
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemRestController {
  private final ItemFacade itemFacade;

  @GetMapping("/{itemId}")
  public String getItem(@PathVariable Long itemId) {
    String response =  itemFacade.getResponse(itemId);
    return response;
  }
}

//Facade
@Component
@RequiredArgsConstructor
public class ItemFacade {
  private final ItemService itemService;
  private final OrderService orderService;

  public String getResponse(Long itemId) {
    String itemName = itemService.findItem(itemId);
    Long orderNumber = orderService.findOrder(itemId);
    return orderNumber + " : " + itemName;
  }
}

 

🙆‍♂️ 컨트롤러(Controller) 가 가지던 각 서브 시스템으로 의존성을 제거하고 파사드(Facade)에 해당 의존성을 통합하고 파사드를 통해 접근하여 서브 시스템으로 접근이 획일화하고 복잡도가 낮아졌다. 추가로 계층 간의 결합도를 낮추는 효과도 생겼다.

 

 

참조

‘파스드’란 무엇인가

 

'파사드'란 무엇인가

공간의 '첫 인상'을 만들기 위하여 | 여행 혹은 맛집 목적지 설정을 하려는데 SNS 후기 정보가 충분하지 않을 때, 우리는 "뺑뺑이 돈다."는 표현을 자주 쓴다. 무작정 두 발로 동네 탐색에 나서는

brunch.co.kr

코딩으로 학습하는 GoF의 디자인 패턴

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

GoF의 디자인 패턴

 

GoF의 디자인 패턴 :재사용성을 지닌 객체지향 소프트웨어의 핵심요소 - 교보문고

▶ 이 책은 디자인 패턴을 다룬 이론서입니다. 디자인 패턴의 기초적이고 전반적인 내용을 학습할 수 있습니다.

www.kyobobook.co.kr

TheRED:비즈니스성공을위한Java/Spring기반서비스 개발과 MSA구축 by이희창

 

The RED : 비즈니스 성공을 위한 Java/Spring 기반 서비스 개발과 MSA 구축 by 이희창 | 패스트캠퍼스

쿠팡, 토스를 거친 29CM의 개발 디렉터 이희창이 주문하기, 선물하기 기능 개발 경험을 토대로 MSA 구축 실무 프로젝트를 위주로 구성한 강의 입니다. 잘 짜여진 코드와 MSA 전환에 필요한 이론 뿐

fastcampus.co.kr

 

댓글