@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
}
final 키워드
생성자 주입을 사용하면 필드에 `final` 키워드를 사용할 수 있다. 그래서 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.
- 생성자에서의 초기화: final 필드는 반드시 생성자에서 초기화되어야 합니다. 이는 모든 의존성이 객체 생성 시 명확히 주입되어야 함을 보장합니다.
- 불변성 보장: 한 번 초기화된 후 이 필드들은 변경될 수 없습니다. 이는 객체가 사용되는 동안 해당 의존성이 변경되지 않음을 보장하여, 애플리케이션의 안정성과 예측 가능성을 높입니다.
- 스레드 안전성: final 필드는 객체 생성 후 변경되지 않으므로, 객체가 다른 스레드에 의해 공유될 때 발생할 수 있는 동시성 문제를 방지할 수 있습니다.
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 조회 빈이 2개이상 - 문제 (0) | 2024.05.14 |
---|---|
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 롬복과 최신 트랜드 (0) | 2024.05.14 |
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 다양한 의존관계 주입 방법 (0) | 2024.05.14 |
[스프링| 스프링 핵심 원리 | 기본편 | 컴포넌트 스캔] 필터, 중복등록과 충돌 (0) | 2024.05.13 |
[스프링| 스프링 핵심 원리 | 기본편 | 컴포넌트 스캔]컴포넌트 스캔과 의존관께 자동 주입 시작하기 (0) | 2024.05.13 |