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);
스프링을 이용한 객체 조립과 사용은 다음 글에서 쓰도록 함!
참고자료: 초보 웹 개발자를 위한 스프링 프로그래밍 입문(저자: 최범균)
반응형