작성
·
92
0
안녕하세요 강사님 좋은 강의 감사드립니다.
의존성 주입의 예시가 Chef의 멤버 변수에 대한 의존성 주입 예시라고 이해했는데 파라미터 주입 예시 코드에서
Chef의 멤버변수에 값을 넣어주는 코드가 없는거 같아서 잘 이해가 되지 않아 질문드립니다.
강사님께서 7분 34초에 setter와 멤버 변수를 이용해서 받는 필드 주입이 있다고 하셨는데
제가 다른 래퍼런스를 찾아본 결과 강사님께서 설명해주신 부분을 setter 주입이라고 하고
필드 주입은 @Autowired 어노테이션을 통한 주입이라고 설명하더라고요 그래서 이 부분에서 혼동이 생겨 질문 드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
김예찬님의 질문에 답변 드리겠습니다.
Chef
클래스가 Knife
클래스에 의존할 경우, Chef
클래스의 생성자에서 Knife
객체를 파라미터로 받아 이를 내부 멤버 변수에 할당하는 것입니다. 아래는 Spring Framework에서 파라미터로 객체를 주입하는 코드 예시입니다.import org.springframework.stereotype.Service;
@Service
public class MyAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public MyAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
이 코드 예시처럼 MyAccountService
클래스는 생성자를 통해 RiskAssessor
객체를 파라미터로 받고, 이를 멤버 변수 riskAssessor
에 할당합니다.
@Autowired
어노테이션을 사용하여 Spring이 자동으로 해당 타입의 빈을 찾아서 할당하는 방법입니다. 반면, setter 주입은 setter 메소드에 @Autowired
어노테이션을 부여하여 해당 메소드를 통해 의존성을 주입받는 방식입니다. 두 방식은 사용하는 위치(필드 또는 setter 메소드)와 때에 따라 구분됩니다.필드 주입 예시:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@Autowired
private RiskAssessor riskAssessor;
// ...
}
setter 주입 예시:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private RiskAssessor riskAssessor;
@Autowired
public void setRiskAssessor(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
이렇듯 setter와 필드 주입은 주입 방식에서 차이를 가집니다. 필드 주입은 직접 필드에 어노테이션을 붙여 사용하고, setter 주입은 setter 메소드를 통해 의존성을 주입받습니다.
질문에 대한 답변이 되었기를 바랍니다.