[Java] Interface와 Implement의 분리: 느슨한 결합
인터페이스와 구현의 분리: 느슨한 결합
오늘 유튜브로 Redis 실습 강의 영상을 보다가 우연히 실습영상에서 디렉토리 구조를 보게 되었는데요. Service 인터페이스와 ServiceImpl 구현 클래스의 분리되어 있어서 소스 코드를 좀 찾아봤습니다. 이러한 구조는 유지보수성, 확장성 및 테스트 용이성을 크게 향상시키는 핵심 원칙이며 주로 느슨한 결합(loosely coupled)
이라고 불리우고 있었습니다. 느슨한 결합 자주 듣긴 했지만 그냥 넘어가기는 아쉬워서 한번 적용해보고자 합니다.
(참고: 공부하고 있던 자료 :https://www.youtube.com/watch?v=WrAT8m2xlgc )
인터페이스와 구현 분리의 이점
일단 왜 사용하는지 알고 가도록 하겠습니다.
1. 유연성과 확장성: 비즈니스 요구사항의 변화에 따라 새로운 서비스 구현 클래스를 쉽게 추가하거나 수정하여 대응할 수 있습니다. 인터페이스는 변하지 않으므로
, 기존 클라이언트 코드를 변경하지 않아도 됩니다.
2. 유닛 테스트 용이: 서비스 인터페이스를 사용하여 목 객체를 생성함으로써, 구체적인 구현 로직을 격리한 상태에서 테스트를 진행할 수 있습니다. 이는 테스트가 실제 구현에 의존하지 않게 함
으로써 테스트의 단순성과 효율성
을 높여줍니다.
3. 의존성 주입(Dependency Injection) 용이: Spring과 같은 프레임워크를 사용할 때, 인터페이스를 통한 의존성 주입이 코드의 느슨한 결합
을 촉진합니다. 이는 구현체를 변경하거나 교체할 때 애플리케이션의 다른 부분에 영향을 미치지 않게 해 줍니다.
느슨한 결합: 구성 요소 간의 의존성이 인터페이스를 통해 최소화됩니다. 이는 시스템의 각 부분을 독립적으로 개발하고, 변화에 대응하기 쉽게 만듭니다.
현재 진행 중이던 JWT 코드에 한번 적용해 보겠습니다.
사실 구조적 변경이라 많이 할 것은 없네요.
짧지만 기본기를 익히는데 도움이 됐던 것 같습니다.😅
감사합니다.