실드 인터페이스는 코틀린(1.5 버전부터)의 비교적 새로운 기능으로, 하나의 파일 내에서 인터페이스 구현을 제한하는 데 사용됩니다. 원래 코틀린에는 실드 클래스가 존재하여 상속 계층에 대한 엄격한 제어를 제공하여 포괄적인 처리(예: when 표현식에서)를 쉽게 해줍니다.
문제는 때때로 아키텍처에서 기본 클래스가 아니라 동일한 구현 제한이 있는 인터페이스가 필요하다는 점입니다. 실드 인터페이스의 출현 이전에는 컴파일러의 제한에 부합하기 위해 실드 클래스를 사용해야 했지만, 이는 비즈니스 모델에 항상 잘 맞지 않았고, 특히 다중 상속이나 인터페이스에서 행동 분해가 필요할 때는 더욱 그랬습니다.
해결책: 실드 인터페이스를 사용하면 모든 구현이 하나의 파일 내에서 정의되어야 하는 인터페이스를 정의할 수 있습니다. 이는 코드의 안전성을 높이고 상태나 이벤트의 계층 구조를 제어하고 탐색하는 데 도움을 줍니다.
코드 예시:
sealed interface NetworkState class Success(val data: String) : NetworkState class Error(val code: Int) : NetworkState object Loading : NetworkState
주요 특징:
실드 인터페이스는 선언된 파일 밖에서 구현할 수 있나요?
아니요. 실드 클래스와 마찬가지로 실드 인터페이스는 선언된 동일한 파일 내에서만 구현할 수 있습니다. 파일 외부에서 이러한 인터페이스를 구현하려고 하면 컴파일 오류가 발생합니다.
실드 인터페이스는 클래스로부터 상속할 수 있나요?
아니요, 인터페이스는 다른 인터페이스로부터만 상속될 수 있습니다. 그러나 실드 인터페이스는 다른(실드) 인터페이스로부터 상속될 수 있습니다.
실드 인터페이스는 다중 구현을 지원하나요?
네, 동일한 파일 내에서 클래스는 여러 개의 실드 인터페이스를 구현할 수 있으며, 언어 규칙을 준수하는 경우 실드 인터페이스와 실드 클래스를 동시에 상속할 수도 있습니다.
네트워크 이벤트 처리 시스템에서 개발자는 일반 인터페이스와 실드 클래스를 혼합하여 사용하고, 그 결과 "더러운" 계층 구조와 코드 중복이 발생합니다. when 표현식은 else 블록을 포함해야 합니다.
장점:
단점:
같은 애플리케이션 내에서 실드 인터페이스 NetworkEvent로 전환하여 모든 구현을 하나의 파일에 배치합니다. 이제 NetworkEvent에 대한 when 표현식은 모든 경우를 처리해야 합니다. 코드는 더 읽기 쉽고 유지 보수하기 쉬우며 안전해집니다.
장점:
단점: