JAR파일 dependency 관련하여 질문드립니다.
229
投稿した質問数 1
선생님 안녕하세요, 이펙티브 자바 강의 수강 중 궁금한 것이 있어 질문드립니다.
아래 사진과 같이 chinese-hello-service 프로젝트에 resources파일에 HelloService를 풀패키지 경로까지 적어 등록을 해주셨는데요.

등록을 해주신 다음에는

effective-java-part1 프로젝트에서 참조하여 사용한다고 하셨습니다.
제가 궁금한 것은 HelloService를 resources에 굳이 등록을 하지 않아도 chinese-hello-service 프로젝트를 jar로 말아 effective-java-part1에서 참조하면 HelloService를 사용할 수 있다고 생각하는데요. resources에 등록하고 있는 이유가 있을까요?
혹시 제가 놓치고 있는 부분이나 잘못 이해한 내용이 있을까요?
回答 2
0
안녕하세요.
좋은 질문입니다. 일반적으로 말씀하신대로 jar 파일을 만들어서 의존성으로 추가하고 사용할 수 있습니다. 그런데 이 수업에는 ServiceProvider를 왜, 어떻게 사용하는지 설명하느라 보여드린 것입니다. 혹시 질문의 의도가 ServiceProvider를 왜 사용하느냐 또는 사용할 필요가 있느냐? 질문이라면 원하시는 수준의 결합도에 따라 다르다고 답할 수 있겠습니다. 스프링도 내부에서 의존성을 최대한 유연하고 느슨하게 유지하고자 서비스 프로바이더 패턴을 사용하기 때문에 용도와 사용법을 이해하고 계시면 도움이 될거라는 생각에 수업에 넣었습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
shrkwk5님이 질문하신 내용은 Java 서비스를 개발할 때 META-INF/services 디렉토리에 *서비스 공급자(Provider)*를 등록하는 방식에 관한 것입니다. 이 방식은 Java의 서비스 로더(ServiceLoader) 메커니즘과 관련이 있습니다.
왜 META-INF/services에 등록하는가?
META-INF/services는 Java의 확장 가능성을 지원하는 표준적인 방식입니다. 여기에는 특정 인터페이스를 구현하는 클래스의 목록을 지정합니다. Java의 ServiceLoader는 런타임에 이 정보를 읽어서 인터페이스의 인스턴스를 동적으로 생성할 수 있습니다. 이런 방식은 Java가 제공하는 서비스 프로바이더 인터페이스(SPI) 메커니즘의 일부입니다.
- 장점:
- 모듈화: 인터페이스와 구현을 분리하여 모듈별로 배포할 수 있게 합니다.
- 유연성: 새로운 구현체를 추가하거나 변경할 때 코드 컴파일 없이 설정만으로 가능하게 합니다.
- 모듈화: 인터페이스와 구현을 분리하여 모듈별로 배포할 수 있게 합니다.
예시 상황
만약 HelloService 인터페이스를 여러 프로젝트에서 사용하고, 각각 다른 인사말 서비스를 사용하고 싶다면, 구현체를 META-INF/services에 등록함으로써 어떤 구현체를 사용할지 런타임에 결정할 수 있습니다. 이 방식은 특히 오픈소스 라이브러리나 플러그인 아키텍처를 지원하는 애플리케이션에서 유용합니다.
이해를 돕는 링크
관련된 개념들을 더 깊이 이해하고 싶으시다면, Java ServiceLoader 공식 문서 및 SPI 기법 소개 같은 자료를 참고하시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
선생님 작성한 정적 팩토리 메서드에 대해 의견 주실 수 있으실까요??
0
306
2
책에 쓰여 있는 스레드 안전에 대한 제 생각
0
295
2
프로젝트 설정 관련 질문
0
753
1
브릿지 패턴과 서비스 제공자 프레임워크 관계
0
280
1
[과제] EnumMap과 EnumSet가 HashMap과 HashSet보다 효율적인 이유
0
543
1
정적팩토리메소드와 ServiceLoader는 무슨 관계인가요?
0
346
1
강의 제목 오타 발견!!! 뚜둥
0
283
1
mvn install
1
458
1
강의 코드
0
486
2
Builder 필수값 질문입니다.
0
1044
1
Elvis, IElvis 질문이 있습니다.
0
478
1
EnumMap, EnumSet 정리
0
1003
1
HelloService 구현체
0
407
1
[과제] 강의 너무 만족스럽습니다.
0
716
1
PhantomReference 가 소멸되는 시점을 보는 코드 부분이 약간 이상한것 같습니다.
1
545
2
안녕하세요
2
682
1
객체 소멸에 관한 질문
0
544
0
정적 팩토리 메서드에 대해 질문이 있습니다.
0
542
0
Mock test 관련 질문입니다!
0
530
1
안녕하세요 선생님, 강의를 보고나서 Optional 소스코드를 뜯어보다가 어려운 부분이 있어서 질문 드립니다.
2
522
2
기선님 질문있습니다..
0
381
1
intellij의 equals 자동 생성 기능
1
521
1
Builder에 default값 추가하기
0
304
1
[과제] EnumMap, EnumSet
8
882
1

