생성자를 통해서 의존 관계를 주입 받는 방법
생성자
객체를 생성할 때 호출되는 특별한 메서드
⇒ 클래스의 이름과 동일하며 반환 타입이 없다
⇒ 클래스의 인스턴스를 만들 때 호출된다.
@Component
public class OrderServiceImpl implements OrderService {
/*
기본 생성자 (하나의 클래스에는 여러 개의 생성자가 생성될 수 있다)
public : 다른 패키지, 클래스에서 접근할 수 있는
class : 클래스인
OrderServiceImpl : OrderServiceImpl 객체는
implements : 인터페이스를 구현한다.
OrderService : OrderService 인터페이스
*/
private final MemberRepository memberRepository;
/*
멤버 변수 (클래스 내 다른 메서드에서 사용할 수 있는 변수)
private : 다른 패키지, 클래스에서 접근할 수 없으며
final : 초기값을 가지면 수정할 수 없는
MemberRepository : MemberRepository 타입의 (MemberReposiotry 클래스의)
memberRepository : memberRepository 객체
=> final (초기값을 가지면 외부에서 수정할 수 없다)
=> **불변해야 하는 의존 관계에 사용**
*/
private final DiscountPolicy discountPolicy;
/*
멤버 변수 (클래스 내 다른 메서드에서 사용할 수 있는 변수)
private : 다른 패키지, 클래스에서 접근할 수 없으며
final : 초기값을 가지면 수정할 수 없는
DiscountPolicy : DiscountPolicy 타입의
discountPolicy : discountPolicy 객체
*/
@Autowired
// 의존성 자동 주입
public OrderServiceImpl(MemberRepository memberRepository,
DiscountPolicy discountPolicy) {
/*
생성자 (초기값을 전달 받아, 객체 생성)
전달 받은 값을 인스턴스 변수에 설정한다
=> 생성자에는 거의 무조건 값을 채워 넣어야 한다
=> **필수적인 의존 관계에 사용**
*/
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy
}
}
기본 생성자를 제외하고 생성자가 1개만 있을 경우, @Autowired를 생략해도 자동 주입된다.
setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법
필드
객체의 상태를 나타내고 객체가 가지는 데이터를 저장하는 공간