service 를 interface 로 두는 이유
안녕하세요 강사님.
서비스 계층을 설계할 때 인터페이스를 두고 구현체를 만드는 패턴을 사용하는 이유가 궁금합니다.
현재 프로젝트에서는 구현체가 하나뿐인데, 이런 상황에서도 인터페이스를 분리하는 것이 가지는 실질적인 이점이 무엇인지 알고 싶습니다.
특히 구현이 하나로 고정되어 있다면, 바로 구현 클래스를 빈으로 등록해도 되지 않을지 고민이 되었는데요.
설계 관점에서 인터페이스를 미리 분리해두는 이유와, 실무에서 어떤 장점이 있는지 설명해주시면 감사하겠습니다
답변 1
1
안녕하세요 쵸잉님 질문 주셔서 감사합니다.
말씀해주신부분처럼 굳이 인터페이스를 사용하지 않아도 됩니다. 이건 개인적인 스타일에 가까운거 같아요. 그래서 제 코드가 옳다고 말씀드리기에는 좀 조심스러운 부분이 있습니다.
근데 분리하게 되었을 떄 가질 수 있는 장점은 몇개 있습니다. 대표적으로 CGLIB 같은 문제로 인해서 생성자 제약을 피할 수도 있고, DIP 원칙의 관점에서 구현체가 바뀐다는 부분도 가정했을 떄 변경하기도 편하죠.
뭐 굳이 따지자면 이런 이유들이 다양하게 있는데, 우리가 현실적으로 코드 작성할 떄 막 이런 케이스까지 고려하지는 않습니다. 그래서 쵸잉님이 원하시는 스타일로 작성하셔도 큰 문제는 없을꺼같네요.
어디까지나 개발은 각자만의 스타일이 있으니깐요 ㅎㅎ 이정도면 이해가 되셨을까요??
감사합니다!
강의 관련 질문드립니다.
1
19
2
Jib 빌드가 83%에서 멈추는 문제 해결(windows 사용자)
1
20
1
상세 설정까지 이해하시는 비결이 궁금합니다
1
45
2
claude api 크레딧
0
35
0
서비스에서와 컨트롤러의 @Vaild 적용 차이에 대해서
0
38
2
Apple Silicon에서 CI 빌드 이미지가 재시작을 반복할 때 (jib platforms 수정)
1
47
1
제공된 스크립트를 어디서 받을 수 있나요?
0
35
1
해결했습니다
0
36
1
copilot-instruction.md
0
31
2
미션 제출 방식 건의
0
36
0
강의 슬라이드 자료
1
44
2
트랜잭션 내 Redis I/O 에 대한 궁금한점
1
34
1
미션 진행 방식에 대한 질문입니다.
0
51
1
지금 강의가 어려우신분 추천드립니다.
0
52
1
getOrCreate / Unique? 멱등 처리 질문
1
61
2
기존의 완성된 CRUD의 Build.gradle에 security관련 dependency를 추가하면 문제가 생깁니다.
0
62
2
RedisMessageBroker.kt setLocalMessageHandler 관련 문의
0
116
2
빌드 파일
0
125
2
웹소켓을 이용한 채팅시스템에서 부하테스트를 어떻게 진행해야할까요?
0
394
2
엔티티는 Data Class로 작성하면 안되나요?
0
143
2
stomp websocket
0
118
1
웹소캣 stomp
0
131
2
그레이스풀 셧다운과 데몬 스레드의 관계 질문
0
140
1
api모듈에대해 문의드립니다.
0
121
2





