예를 들어 영화예매 소프트웨어가 있다면 그건 영화를 좀더 쉽고 빠르게 예매하려는
사용자의 문제를 해결하기 위해 릴리즈된 프로그램이다.
이때 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야
를 도메인
이라고 정의한다.
그리고 그 도메인에서 다루는 핵심 개체를 엔티티
라고 말한다.
기존 계층형 아키텍처에서 생각을 해보면 테이블에 매핑되는 엔티티, JPA로 관리되는
엔티티등을 쉽게 예시로 들 수 있다.
클린아키텍처에서 말하는 유스케이스는
내가 만들고자 하는 시스템(혹은 서비스)을 사용하는 클라이언트가 그 시스템을 통해 하고자 하는 것
도메인과 유스케이스 관계의 핵심은 비지니스 로직이 도메인에 존재해야한다
OOP와도 겹치는 부분인데, 도메인 엔티티는 상태를 가지고 있고, 비지니스 로직상 상태에 변경이 일어난다면
이 변경의 책임은 도메인이 지어야한다는 의미다. 따라서 도메인은 최대한 두껍게 가져가고,
이 도메인의 비지니스 로직을 오케스트레이션하는 역할이 바로 유스케이스의 역할이 된다.
유스케이스의 의존성 화살표방향을 보면 Input Port에는 구현을, Output Port에는 의존관계를 맺고 있다.
유스케이스에 Input되는 포트와 어댑터를 주도하는 어댑터/포트, 혹은 Incomming Adapter/Port라고 칭하며,