기록/Spring framework

객체 조립기(Assembler)의 필요성. 2021-10-18

최동훈1 2021. 10. 15. 16:24

시작하기전에 간단히 설명하자면, 회원등록서비스, 비번변경서비스 등을 만들어서 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분.