2021. 7. 2. 12:34ㆍJAVA/Spring
본 글은 최범균 저자의 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 도서의 내용을 복습하기 위해 작성된 글입니다.
4. 예제 프로젝트 만들기
예제 프로젝트 클래스 구성
- 회원 데이터 관련 클래스
- Member
- WrongIdPasswordException
- MemberDao
- 회원 가입 처리 관련 클래스
- DuplicateMemberException
- RegisterRequest
- MemberRegisterService
- 암호 변경 관련 클래스
- MemberNotFoundException
- ChangePasswordService
예제 프로젝트 클래스 소스코드
https://github.com/yonghwankim-dev/spring5/tree/master/sp5-chap03/src/main/java/spring
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
5. 객체 조립기
앞서 DI(Dependency Injection)을 설명할 대 객체 생성에 사용할 클래스를 변경하기 위해(그 객체를 사용하는 코드를 변경하지 않고) 객체를 주입하는 코드 한 곳만 변경하면 된다고 하였다. 그렇다면 실제 객체를 생성하는 코드는 어디에 있을까? 답은 메인 메서드에서 객체를 생성하면 될 것이다.
public class Main{
public static void main(String[] args){
MemberDao memberDao = new MemberDao();
MemberRegisterService regSvc = new MemberRegisterService(memberDao);
ChangePasswordService pwdSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao);
...// regSvc와 pwdSvc를 사용하는 코드
}
}
main 메서드에서 의존 대상 객체를 생성하고 주입하는 방법도 나쁘지 않다. 이 방법보다좀 더 나은 방법은 객체를 생성하고 의존 객체를 주입해주는 클래스를 따로 작성하는 것이다. 의존 객체를 주입한다는 것은 서로 다른 두 객체를 조립한다고 생각할 수 있는데, 이런 의미에서 이 클래스를 조립기라고도 표현한다.
조립기 클래스 정의
package assembler;
import spring.ChangePasswordService;
import spring.MemberDao;
import spring.MemberRegisterService;
public class Assembler {
private MemberDao memberDao;
private MemberRegisterService regSvc;
private ChangePasswordService pwdSvc;
public Assembler()
{
memberDao = new MemberDao();
regSvc = new MemberRegisterService(memberDao);
pwdSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao);
}
public MemberDao getMemberDao() {
return memberDao;
}
public MemberRegisterService getMemberRegisterService() {
return regSvc;
}
public ChangePasswordService getChangePasswordService() {
return pwdSvc;
}
}
위와 같이 Assembler 클래스의 생성자를 통해서 MemberDao 객체를 생성하고 의존 주입을 수행한다.
조립기(Assembler) 클래스의 생성 및 사용
Assembler assembler = new Assembler();
ChangePasswordService changePwdSvc = assembler.getChangePasswordService();
changePwdSvc.changePassword("madvirus@madvirus.net","1234","newpwd");
MemberDao -> CachedMemberDao 클래스의 변경
public Assembler()
{
memberDao = new CachedMemberDao();
regSvc = new MemberRegisterService(memberDao);
pwdSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao);
}
5.1 조립기 사용 예제
MainForAssembler.java 메인 클래스 작성
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
실행결과
References
초보 웹 개발자를 위한 스프링5 프로그래밍 입문, 최범균 저
'JAVA > Spring' 카테고리의 다른 글
3. 스프링 DI(Dependency Injection) #4 @Configuration 설정 클래스의 @Bean 설정과 싱글톤 (0) | 2021.07.02 |
---|---|
3. 스프링 DI(Dependency Injection) #3 스프링 DI 설정 (0) | 2021.07.02 |
3. 스프링 DI(Dependency Injection) #1 객체 의존과 의존 주입(DI) (0) | 2021.07.02 |
2. 스프링 시작하기 #3 싱글톤(Singleton) 객체 (0) | 2021.07.01 |
2. 스프링 시작하기 #2 그레이들 프로젝트 생성 (0) | 2021.07.01 |