💡 개요
클래스마다 무조건 인터페이스를 생성하라고 요구하는 구현 표준은 좋은 예다.
이 문장은 클린코드(12장-창발성 P.222)에서 발췌해온 문장이다.
왜 클래스마다 무조건 인터페이스를 생성하는 게 좋은 예시일까?
인터페이스를 만든다는 것은 공통된 기능이 있다는 의미일 것이고, 인터페이스를 사용한다면 해당 기능을 자연스럽게 강제화하는 것인데…
🛠️ 인터페이스를 생성하는 게 좋은 이유
인터페이스를 만들면 얻을 수 있는 장점이 뭐가 있을까?
✅ DIP(의존 역전 원칙) 적용 가능
상위 모듈(사용자)은 하위 모듈(구현체)에 의존하지 않고, 인터페이스(추상화)에 의존하게 됨으로써 결합도가 낮아진다. 이는 유연한 구조를 가능하게 만든다.
✅ 테스트 용이성 향상
인터페이스가 있으면 테스트 시 실제 구현체 대신 가짜(Mock) 객체를 주입할 수 있어 테스트가 쉬워진다.
✅ 유연한 확장성
요구사항이 변경되어 다른 구현이 필요해져도 인터페이스를 구현한 새로운 클래스를 만들기만 하면 되므로, 기존 코드에 영향을 주지 않고 기능을 확장할 수 있다.
이를 보다시피 인터페이스를 사용한다면 얻을 수 있는 장점이 많다.
하지만 위에서도 언급했다시피 인터페이스를 구현하는 구현체는 인터페이스에 정의된 추상 메서드를 모두 구현해야 한다.
그렇기 때문에 인터페이스를 사용할 영역을 확실하게 결정해야 한다.
🤔 결론: 인터페이스는 ‘변화 가능성’이 있는 곳에만!
인터페이스는 강력한 도구지만, 무조건적인 생성은 좋은 설계가 아니다.
진짜 추상화가 필요한 경우에만 도입해야 하며, 다음과 같은 경우가 적절한 사용 예이다.
- 구현체가 둘 이상 필요할 가능성이 있는 경우
- 테스트를 위해 의존성 주입이 필요한 경우
- 외부 라이브러리나 API와 유연하게 연동하기 위한 경우
- 팀 규모가 크고, 각자의 역할이 명확히 분리되어야 하는 경우
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.05.17 - 비동기와 멀티스레딩? (1) | 2025.05.17 |
---|---|
[개발 일기] 2025.05.16 - PSA (Portable Service Abstraction) (0) | 2025.05.16 |
[개발 일기] 2025.05.14 - ConfigurationProperties와 Setter (0) | 2025.05.14 |
[개발 일기] 2025.05.13 - 자바 Optional 정리 (0) | 2025.05.13 |
[개발 일기] 2025.05.12 - 분산 저장 (파티셔닝, 샤딩) (0) | 2025.05.12 |