퍼사드 패턴

Facade는 건물 외관을 의미하는 단어로 어떤 소프트웨어의 다른 커다란 코드

부분에 대하여 간략화된 인터페이스를 제공해주는 디자인 패턴을 의미

퍼사드 객체는 복잡한 소프트웨어 바깥쪽의 코드가 라이브러리의

안쪽 코드에 의존하는 일을 감소시켜줌

정리

Facade 패턴은 외부에서 내부의 구조를 모르도록 하는 것

많은 내부 구조들을 거대한 클래스로 감싸서 편리한 인터페이스 제공

예제

@RequiredArgsConstructor
@Component
public class FeedFacade {

    private final FeedRepository feedRepository;

    public Feed getFeed(Long feedId) {
        return feedRepository.findById(feedId)
                .orElseThrow(() -> FeedNotFoundException.EXCEPTION);
    }

}

사용

@RequiredArgsConstructor
@Service
public class UpdateFeedService {

    private final UserFacade userFacade;
    private final FeedFacade feedFacade;

    @Transactional
    public void modifyFeed(Long feedId, UpdateFeedRequest request) {
        User user = userFacade.getCurrentUser();
        Feed feed = feedFacade.getFeed(feedId);

        feed.modifyFeed(request.getTitle(),
                request.getContent());
    }

}

비즈니스 로직에서 반복되던 작업을 한 곳에서 처리

UserFacade, FeedFacade를 DI하면 User를 찾는 작업과 Feed를 찾는 작업을

userFacade.getCurrentUser()와 같이 단순하게 가능하다

중요한건 외부에서 내부의 작업을 알 수 없다는 것이다