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