시작하기전에 간단히 설명하자면, 회원등록서비스, 비번변경서비스 등을 만들어서 Main 메서드에 실행하려 한다.
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
MemberDao memberdao=new MemberDao();
MemberRegisterService mrs=new MemberRegisterService(memberdao);
PasswordChangeService pcs=new PasswordChangeService(memberdao);
mrs.registermember(new Member(1,6429));
mrs.registermember(new Member(2,9209));
pcs.changepwd(new Member(1,1701));
}
}
이렇게 각각의 서비스를 "직접" 객체를 생성해서 실행했다.
앞서 설명할때 개발할때 유지보수가 편리하게 하기 위해서 의존주입(DI)을 Main 클래스 안에 집약시켜서 실행한것 까지는 잘했다.
추가 설명을 하자면, DI의 장점은 객체생성에 사용할 클래스를 변경하기 위해서는 객체를 주입하는 코드 "한곳"만 변경 가능하게 만든다고 하였다. 그렇다면 이렇게 DI를 하기위해 의존대상이 되는 객체들을 생성할 곳이 필요한데, 난 이곳을 Main으로 한 것이다.
Main 클래스에 DI를 위한 객체를 집약해서 생성하는 것은 나쁘지 않다. 그러나 Main 클래스의 Main 함수는 자바 프로그램의 "시작"점이되는 클래스이고 의존주입을 Main에 하기 보다는 개발자의 큰 틀을 구현하는 것이 바람직하다.
모든 의존관계를 미리 한 클래스 안에 만들어 놓은 뒤에, 필요할때마다 해당 클래스의 객체들을 꺼내쓰도록 하는 기능을 가진 Assembler 를 만들었다.
이 Assembler 라는 클래스는 "객체조립기" 역할을 수행한다.
객체 조립기는 의존대상이 되는 객체를 스스로 주입해주고, 의존대상이되는 객체를 미리 클래스 내부에 생성해 주는 역할을 한다.
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Assembler context;
context=new Assembler();
MemberRegisterService msvc;
msvc=context.getMrs();
PasswordChangeService psvc;
psvc=context.getPcs();
msvc.registermember(new Member(1234,1));
msvc.registermember(new Member(6429,2));
psvc.changepwd(new Member(6429, 7));
}
}
class Assembler{
private MemberDao memberdao;
private MemberRegisterService mrs;
private PasswordChangeService pcs;
Assembler(){
memberdao=new MemberDao();
mrs=new MemberRegisterService(memberdao);
pcs=new PasswordChangeService(memberdao);
}
public MemberDao getMemberdao() {
return memberdao;
}
public MemberRegisterService getMrs() {
return mrs;
}
public PasswordChangeService getPcs() {
return pcs;
}
}
객체조립기를 이용한 모습.
DI에 필요한 객체를 미리 생성해주고 의존주입까지 알아서 해주는 Assembler를 이용하여 Main 메서드를 만들었다. 그러니 코드 가독성이 증가되었고, 독립적인 개발이 수월하게 되었다.
스프링= 범용적인객체조립기.
공부시간 1시간.
순공시간 30분.
'기록 > Spring framework' 카테고리의 다른 글
스프링 설정 클래스에서 @Autowired를 통한 자동 DI, 설정메서드(세터) 형식의 DI, 두개 이상의 설정 클래스로 스프링 컨테이너 만들기. 2021-10-22 (0) | 2021.10.22 |
---|---|
스프링의 역할: 객체 조립기(@Configuration) (0) | 2021.10.19 |
메이븐프로젝트의 식별자: 아티팩트ID 2021-10-13. (0) | 2021.10.13 |
윈도우 콘솔창에서 메이븐 프로젝트 컴파일하기. 2021-10-12 (0) | 2021.10.12 |
복습 chap 02. , 이클립스에 메이븐 프로젝트 import. , 이클립스와 자바 프로젝트와의 관계, 인텔리제이와 이클립스의 관계. (0) | 2021.10.07 |