728x90
반응형
이번 포스팅에서는 Setter 메서드를 사용한 의존성 주입에 대한 규칙과 해당 방식을 활용한 코드 예제를 살펴보겠습니다. 또한, 세터 메서드를 이용한 의존성 주입을 설정하는 코드와 생성자 방식의 장단점에 대한 비교도 진행하겠습니다.
Setter 메서드 규칙
Setter 메서드는 다음과 같은 규칙을 따릅니다:
- 메서드 이름이 "set"으로 시작
- "set" 뒤 첫 글자는 대문자로 시작
- 파라미터는 1개
- 리턴 타입은 void
코드 예제: 세터 메서드를 이용한 의존 객체 주입
public class MemberInfoPrinter {
private MemberDao memberDao;
private MemberPrinter printer;
public void printMemberInfo(String email) {
Member member = memberDao.selectByEmail(email);
if (member == null) {
System.out.println("no such data...");
return;
}
printer.print(member);
System.out.println();
}
// Setter 메서드로 의존 객체 주입
public void setMemberDao(MemberDao memberDao) {
this.memberDao = memberDao;
}
public void setPrinter(MemberPrinter printer) {
this.printer = printer;
}
}
설정 코드: 세터 메서드를 통한 의존성 주입
@Configuration
public class AppCtx {
//...
@Bean
public MemberDao memberDao() {
System.out.println("memberDao() call...");
return new MemberDao();
}
@Bean
public MemberPrinter memberPrinter() {
System.out.println("memberPrinter() call...");
return new MemberPrinter();
}
// 세터 메서드를 통해 주입하도록 설정
@Bean
public MemberInfoPrinter infoPrinter(){
MemberInfoPrinter infoPrinter = new MemberInfoPrinter();
infoPrinter.setMemberDao(memberDao());
infoPrinter.setPrinter(memberPrinter());
return infoPrinter;
}
}
의존성 주입 방식의 비교
생성자 방식
- 빈 객체를 생성하는 시점에 모든 의존 객체가 주입됨.
- 파라미터 개수가 많을 경우 각 인자가 어떤 의존 객체를 설정하는지 확인하기 어려움.
세터 메서드 방식
- 빈 객체를 생성하고 나서 세터 메서드를 사용하여 필요한 의존 객체를 주입.
- 메서드 이름만으로 어떤 의존 객체를 설정하는지 쉽게 유추 가능.
장단점 비교
세터 메서드 방식의 장점과 생성자 방식의 단점
- 설정 메서드 방식은 메서드 이름만으로도 어떤 의존 객체를 설정하는지 쉽게 유추 가능.
생성자 방식의 장점과 세터 메서드 방식의 단점
- 생성자 방식은 빈 객체를 생성하는 시점에 필요한 모든 의존 객체를 주입받기 때문에, 객체를 사용할 때 완전한 상태에서 사용 가능.
- 세터 메서드 방식은 세터 메서드를 사용해서 필요한 의존 객체를 전달하지 않아도 빈 객체가 생성되기 때문에 객체를 사용하는 시점에 NullPointerException이 발생할 수 있음.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring] Autowired 와 수동 Bean 등록 (@Qualifier) (0) | 2024.01.24 |
---|---|
[Spring] @Autowired - 의존성 자동주입 (0) | 2024.01.24 |
[Spring] 의존성 주입 (DI) - 생성자 주입 (2) | 2024.01.22 |
[Spring] 빈 생명주기 콜백 (0) | 2023.02.14 |
[Spring] 웹 스코프와 프록시 객체 (0) | 2023.02.14 |