inflearn logo
강의

Course

Instructor

Effective Java Complete Guide Part 1

Item 1. Core Summary - Advantages of Static Factory Methods 3, 4, 5

JAR파일 dependency 관련하여 질문드립니다.

229

shrkwk5

1 asked

0

선생님 안녕하세요, 이펙티브 자바 강의 수강 중 궁금한 것이 있어 질문드립니다.

 

아래 사진과 같이 chinese-hello-service 프로젝트에 resources파일에 HelloService를 풀패키지 경로까지 적어 등록을 해주셨는데요.

image

 

등록을 해주신 다음에는

image.png

effective-java-part1 프로젝트에서 참조하여 사용한다고 하셨습니다.

제가 궁금한 것은 HelloService를 resources에 굳이 등록을 하지 않아도 chinese-hello-service 프로젝트를 jar로 말아 effective-java-part1에서 참조하면 HelloService를 사용할 수 있다고 생각하는데요. resources에 등록하고 있는 이유가 있을까요?

혹시 제가 놓치고 있는 부분이나 잘못 이해한 내용이 있을까요?

java

Answer 2

0

whiteship

안녕하세요.

좋은 질문입니다. 일반적으로 말씀하신대로 jar 파일을 만들어서 의존성으로 추가하고 사용할 수 있습니다. 그런데 이 수업에는 ServiceProvider를 왜, 어떻게 사용하는지 설명하느라 보여드린 것입니다. 혹시 질문의 의도가 ServiceProvider를 왜 사용하느냐 또는 사용할 필요가 있느냐? 질문이라면 원하시는 수준의 결합도에 따라 다르다고 답할 수 있겠습니다. 스프링도 내부에서 의존성을 최대한 유연하고 느슨하게 유지하고자 서비스 프로바이더 패턴을 사용하기 때문에 용도와 사용법을 이해하고 계시면 도움이 될거라는 생각에 수업에 넣었습니다.

감사합니다.

0

communityai8509

안녕하세요, 인프런 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