Web/Back

[Spring] DI(Dependency Injection): 의존성 주입이란?

옥돔이와 연근이 2022. 10. 20. 15:26
반응형

Dependency, 의존이란?

클래스 내부에서 직접 의존 객체를 생성하는 것은 쉽지만 유지보수 관점에서 문제를 유발할 수 있다

 

public class MemberRegisterService{
	private MemberDao member= new MemberDao();
    
    public void regist(RegisterRequest req){
   		Member member = memberDao.selectByEmail(req.getEmail());
        
        
        // 같은 이메일 있다면 예외 발생 
        if (member!= null){
        	throw new DuplicateMemberException("dup email"+ req.getEmail());
        }
        
        //같은 이메일 없는 회원이라면 디비에 삽입 
        Member newMember= new Member(
        	req.getEmail(), req.getPassword(), req.getName()
        );
        memberDao.insert(newMember);
    
  	}
   }

 

MemberRegisterService 클래스는 DB 처리를 하기 위해 MemberDao 클래스의 메서드가 필요하다

이렇게 한 클래스가 다른 클래스의 메서드를 실행할 때 이를 의존 이라고 표현한다

" MemberRegisterService 클래스가 MemberDao 클래스에 의존한다 "

 


DI(Dependency Injection)를 통한 의존 처리 

:객체 간에 의존성(객체 간의 관계맺음)을 객체 내부에서 직접 해주는 대신, 외부에서 객체를 생성해서 넣어주는 방식을 말함

예를 들어 위에 MemberRegisterService 클래스에 DI방식을 적용하게 된다면 생성자를 통해서 의존 객체를 전달 받게 된다

 public MemberRegisterService(MemberDao member){
    	this.member= member;
    }

 

전체코드

public class MemberRegisterService{
	private MemberDao member;
    
    public MemberRegisterService(MemberDao member){
    	this.member= member;
    }
    
    public Long regist(RegisterRequest req){
        
        Member member= memberDao.selectByEmail(req.getEmail());
        // 같은 이메일 있다면 예외 발생 
        if (member!= null){
        	throw new DuplicateMemberException("dup email"+ req.getEmail());
        }
        
        //같은 이메일 없는 회원이라면 디비에 삽입 
        Member newMember= new Member(
        	req.getEmail(), req.getPassword(), req.getName()
        );
        memberDao.insert(newMember);
    
  	}
   }

 

DI를 적용한 결과 MemberRegisterService 클래스를 사용하는 코드는 다음과 같이 MemberRegisterService객체를 생성할 때 사용자에 MemberDao 객체를 전달해 한다

MemberDao dao = new MemberDao();

//의존 객체를 생성자를 통해 주입한다
MemberRegisterService svc = new MemberRegisterService(dao);

 

 

 

스프링을 이용한 객체 조립과 사용은 다음 글에서 쓰도록 함!

 

 

참고자료: 초보 웹 개발자를 위한 스프링 프로그래밍 입문(저자: 최범균)

반응형