묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
DI 관련 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import java.util.*; class BackendDeveloper { public void writeJava() { System.out.println("자바가 좋아 인터네셔널~"); } } class FrontEndDeveloper { public void writeJavascript() { System.out.println("자바스크립트가 좋아 인터네셔널~"); } } public class Project { private final BackendDeveloper backendDeveloper; private final FrontEndDeveloper frontEndDeveloper; public Project( BackendDeveloper backendDeveloper, FrontEndDeveloper frontEndDeveloper ) { this.backendDeveloper = backendDeveloper; this.frontEndDeveloper = frontEndDeveloper; } public void implement() { backendDeveloper.writeJava(); frontEndDeveloper.writeJavascript(); } public static void main(String args[]) { Project a = new Project(new BackendDeveloper(), new FrontEndDeveloper()); a.implement(); } }의존성 주입이란 객체가 필요로 하는 의존성(다른 객체나 서비스)을 외부에서 생성하여 주입하는 것으로 알고 있었습니다. 설명하실 때는 위 코드가 의존성 주입, DI가 적용되지 않은 코드라고 하셨는데, 의존성 주입의 3가지 방법중 생성자 주입 방식이 적용된 코드인 것으로 보여서 질문드립니다.인터페이스가 아닌 구체적인 백엔드와 프론트엔드라서 DIP는 위반했지만 DI는 잘 된게 아닌지 헷갈립니다 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
빈으로 등록하지 않았는데 @Autowired를 통해 의존성 주입할 때 충돌이 납니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 @Autowired를 사용해 의존성 주입을 하다 충돌이 나서 질문드립니다.MemberRepository인터페이스 -> MemoryMemberRepository 구현체후자에만 @Component를 붙인 상황입니다.그런데Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/minsung/Desktop/study/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository이런식으로 memberRepository 또한 빈으로 등록되어 있었습니다.@Autowired가 클래스 타입으로 조회한다는 것은 알고 있지만 빈으로 등록되어있는 애들 중에서 조회하는 것 아닌가요...?왜 memberRepository를 빈으로 등록하지 않았는데 빈으로 등록되어있는지@Autowired는 왜 빈으로 등록되지도 않은 memberRepository를 찾을 수 있었는지@Autowired 보다는 @RequiredArgsConstructor 사용을 권장하던데 이제 @Autowired는 잘 쓰이지 않는 것인지궁금합니다!
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
팩토리 패턴의 의존성 주입과 관련해서 질문이 있습니다!
강의 교재에서 "CoffeeFactory라는 상위 클래스가 중요한 뼈대를 결정하고 하위 클래스인 LatteFactory가 구체적인 내용을 결정하고 있습니다. 참고로 이는 의존성 주입이라고도 볼 수 있습니다. CoffeeFactory에서 LatteFactory의 인스턴스를 생성하는 것이 아닌 LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하고 있기 때문이죠."위 문장에 대해 두 가지 의문점이 있습니다.CoffeeFactory 클래스와 LatteFactory가 상속 관계를 가진 상위/하위 클래스인가?CoffeeFactory는 그저 LatteFactory, EspressoFactory를 호출하는 역할의 클래스이고 extends를 통해 상속을 하고 있지 않다고 생각하는데 이 부분이 왜 상속 관계에 있는 것인지 이해가 안갔습니다.LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하고 있다?해당 예시에서 의존성 주입은 의존성 주입자의 역할을 하고있는 CoffeeFactory 클래스가 main 함수와 하위 클래스(LatteFactory, EspressoFactory)와의 의존성을 느슨하게 만들고, 하위 클래스가 CoffeeFactory 클래스에 의존하게 만들면서 달성된다고 생각했습니다. 그런데 LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하기 때문에 의존성 주입이 달성된다는 문장이 이해가 안 갔습니다.+static 메서드를 사용하고 있기 때문에 인스턴스를 생성하지 않는 것으로 보이는데 '인스턴스'를 주입하고 있다는 문장도 잘 이해가 가지 않습니다.긴 질문 읽어주셔서 감사합니다! 답변 기다리겠습니다 :)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@RequiredArgsConstructor 로 의존성 주입시, 테스트 코드 서비스 생성에러
MemeberService에서 @RequiredArgsConstructor로 MemberRepository 주입시, 테스트 코드에서 MemeberService 생성시 파라미터를 받는데, 강의에서 new로 생성하였을 때와 무슨차이인지가 궁금합니다 ㅠㅠ 아래와 같이 코드를 작성하였습니다. @Service@RequiredArgsConstructor@Slf4jpublic class MemberService {private final MemberRepository memberRepository;... } class MemberServiceTest { // command + shift + t 테스트 코드 껍데기 자동생성... MemberService memberService = new MemberService(new MemoryMemberRepository()); @Test void join() { } @Test void findMembers() { } @Test void findOne() { } }
-
미해결실전! 스프링 데이터 JPA
DI를 필드주입에서 생성자주입으로 변경하니 오류발생하였습니다.
의존성 주입 학습 중에 @Autowired에 private를 쓰는 방식보다 @RequiredArgsConstructor과 private final를 쓰는 방식이 더 우수하다는걸 학습하고 리팩토링 하는 중에 문제가 생겨서 질문을 올리게 되었습니다. 몇몇 수정이 되지 않는 코드들이 있어서 사진과 함께 질문 올리고 싶습니다. 1. OAUTH 토큰 발급 관련 코드 기존 필드 주입 생성자 주입으로 변경시 컴파일 에러 2. 기존의 코드를 상속해서 constructor을 재선언한 코드 기존 필드 주입 방식 생성자 주입으로 변경시 마찬가지로 컴파일 에러 뭔가 근본적으로 잘못한것 같은데 어디서부터 손을 대야될지 모른채 고치고 틀리고만 몇시간째 반복하고 있습니다 잘 부탁드리겠습니다.
-
미해결실전! 스프링 데이터 JPA
jpaRepository 의존성 주입 중복문제????
안녕하세요 김영환 강사님강의를 들으면서 다른 작업시 이러한 문제가 발생해서 진행이 안됩니다. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adminBoardController' defined in file [C:\Users\web\projects\xxx-api\build\classes\java\main\com\xxx\xxxapi\controller\admin\AdminBoardController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'articleService' defined in file [C:\Users\web\projects\xxx-api\build\classes\java\main\com\xxx\xxxapi\service\ArticleService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleRepository' defined in com.xxx.xxxapi.repository.board.ArticleRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'articleService' defined in file [C:\Users\web\projects\xxx-api\build\classes\java\main\com\xxx\xxxapi\service\ArticleService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleRepository' defined in com.xxx.xxxapi.repository.board.ArticleRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleRepository' defined in com.xxx.xxxapi.repository.board.ArticleRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: org.springframework.data.repository.query.QueryCreationException Could not create query for public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] 어떤 문제인지 부탁드립니다