JAVA · 디자인패턴
클린 아키텍처
의존성 역전 원칙에 기반한 클린 아키텍처의 계층 구조와 구현입니다.
디자인패턴고급클린아키텍처의존성역전유스케이스포트어댑터
핵심 설명
의존성 역전 원칙에 기반한 클린 아키텍처의 계층 구조와 구현입니다.
Java code
// 클린 아키텍처 — 안쪽에서 바깥으로
// 1. 엔터티 (도메인 핵심)
record User(String id, String name, String email) {
User {
if (name == null || name.isBlank())
throw new IllegalArgumentException("이름 필수");
}
}
// 2. 유스케이스 (비즈니스 규칙)
interface UserRepository { // 포트 (추상)
User findById(String id);
void save(User user);
}
class CreateUserUseCase {
private final UserRepository repo;
CreateUserUseCase(UserRepository repo) { this.repo = repo; }
User execute(String name, String email) {
User user = new User(
java.util.UUID.randomUUID().toString(), name, email);
repo.save(user);
return user;
}
}
// 3. 어댑터 (외부 시스템 구현)
class InMemoryUserRepository implements UserRepository {
private final java.util.Map<String, User> store = new java.util.HashMap<>();
public User findById(String id) { return store.get(id); }
public void save(User user) { store.put(user.id(), user); }
}
// 4. 프레임워크 (진입점)
class Main {
public static void main(String[] args) {
UserRepository repo = new InMemoryUserRepository();
CreateUserUseCase useCase = new CreateUserUseCase(repo);
User user = useCase.execute("홍길동", "hong@test.com");
System.out.println("생성: " + user);
}
}학습 팁
의존성 방향은 항상 바깥에서 안쪽입니다. 유스케이스가 리포지토리 인터페이스를 정의하고, 어댑터가 구현합니다(의존성 역전).
주의할 점
엔터티에 프레임워크 어노테이션(@Entity, @Column)을 붙이면 도메인이 프레임워크에 의존하게 됩니다. 분리하세요.
자주 묻는 질문
클린 아키텍처란 무엇인가요?
의존성 역전 원칙에 기반한 클린 아키텍처의 계층 구조와 구현입니다.
클린 아키텍처 학습 시 주의할 점은 무엇인가요?
엔터티에 프레임워크 어노테이션( @Entity , @Column )을 붙이면 도메인이 프레임워크에 의존하게 됩니다. 분리하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.