KOTLIN · 디자인패턴
유즈케이스 패턴 (Use Case)
하나의 비즈니스 동작을 캡슐화하는 유즈케이스(인터랙터) 패턴입니다. 클린 아키텍처의 핵심 구성요소입니다.
디자인패턴고급use-caseclean-architectureinteractorsrp
핵심 설명
하나의 비즈니스 동작을 캡슐화하는 유즈케이스(인터랙터) 패턴입니다. 클린 아키텍처의 핵심 구성요소입니다.
Kotlin code
// 기본 유즈케이스 인터페이스
fun interface UseCase<in P, out R> {
suspend operator fun invoke(params: P): R
}
data class User(val id: String, val name: String, val active: Boolean)
// 리포지토리
interface UserRepo {
suspend fun findById(id: String): User?
suspend fun save(user: User)
}
// 구체적 유즈케이스
class GetActiveUsersUseCase(
private val repo: UserRepo
) : UseCase<Unit, List<User>> {
override suspend fun invoke(params: Unit): List<User> =
listOf(User("1", "김철수", true), User("2", "이영희", false))
.filter { it.active }
}
class DeactivateUserUseCase(
private val repo: UserRepo
) : UseCase<String, Result<Unit>> {
override suspend fun invoke(params: String): Result<Unit> = runCatching {
val user = repo.findById(params)
?: throw NoSuchElementException("사용자 없음: $params")
repo.save(user.copy(active = false))
}
}
fun main() = kotlinx.coroutines.runBlocking {
val mockRepo = object : UserRepo {
val store = mutableMapOf<String, User>()
override suspend fun findById(id: String) = store[id]
override suspend fun save(user: User) { store[user.id] = user }
}
val getActive = GetActiveUsersUseCase(mockRepo)
println("활성 사용자: ${getActive(Unit)}")
}학습 팁
operator fun invoke를 사용하면 유즈케이스를 함수처럼 호출할 수 있어 코드가 간결해집니다: getUsers()
주의할 점
유즈케이스에 여러 책임을 넣으면 SRP 위반입니다. 하나의 유즈케이스는 하나의 비즈니스 동작만 수행해야 합니다.
자주 묻는 질문
유즈케이스 패턴 (Use Case)란 무엇인가요?
하나의 비즈니스 동작을 캡슐화하는 유즈케이스(인터랙터) 패턴입니다. 클린 아키텍처의 핵심 구성요소입니다.
유즈케이스 패턴 (Use Case) 학습 시 주의할 점은 무엇인가요?
유즈케이스에 여러 책임을 넣으면 SRP 위반입니다. 하나의 유즈케이스는 하나의 비즈니스 동작만 수행해야 합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.