반응형
오늘은 Spring책으로 공부해봤다!
Dependency Injection은 의존 주입 이라고 한다.
의존 주입이 뭔지 함께 알아보자!
Dependency (의존) 이란??
- 한 클래스가 다른 클래스의 메서드를 실행할 때 이를 의존한다고 표현한다.
import java.time.LocalDateTime;
public class MemberRegisterService {
private MemberDao memberDao = new MemberDao();
public void regist(RegisterRequest req) {
// 이메일로 회원 데이터 조회
Member member = memberDao.selectByEmail(req.getEmail());
if (member != null) {
// 같은 이메일을 가진 회원이 이미 존재하면 익셉션 발생
throw new DuplicateMemberException("dup email " + req.getEmail());
}
// 같은 이메일을 가진 회원이 존재하지 않으면 DB에 삽입
Member newMember = new Member (
req.getEmail(), req.getPassword(), req.getName(), LocalDateTime.now());
memberDao.insert(newMember);
}
}
MemberRegisterService클래스가 MemberDao클래스에 의존한다고 표현할 수 있다.
[정리]
MemberDao의 insert() 메서드의 이름을 변경했을때 MemberRegisterService 클래스의 소스코드도 함께 변경된다.
이렇게 변경에 따른 영향이 전파되는 관계를 의존 이라고 한다!
- 의존은 변경에 의해 영향을 받는 관계를 의미!
Dependency Injection인 의존 주입은?
- 의존 객체를 전달받는 방식을 사용한다!
위 MemberRegisterService 클래스에 DI방식을 적용해보자!
import java.time.LocalDateTime;
public class MemberRegisterService {
private MemberDao memberDao;
public MemberRegisterService (MemberDao memberDao) {
this.memberDao = memberDao;
}
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(), LocalDateTime.now());
memberDao.insert(newMember);
return newMember.getId();
}
}
[무엇이 바뀌었나?]
- 생성자를 통해서 의존 객체를 전달 받고있다.
- MemberRegisterService가 의존하고있는 MemberDao 객체를 주입(Injection)받고있다!
- MemberRegisterService객체를 생성할 때 생성자에 MemberDao 객체를 전달해야한다!
아 설명할꺼 많은데 너무 많아서 뭐를 적어야할지 모르겠네...
일단 공부하고올께요 근데 너무 졸립당 ヽ(≧□≦)ノ
이 글은 스프링 프로그래밍 입문 5 책을 참고하였습니다.
** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.
이곳 저곳에서 구글링한 것과 강의 들은
내용이 정리가 되었습니다.
그림들은 그림밑에 출처표시를 해놓았습니다.
문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **
반응형
'public void static main > Java' 카테고리의 다른 글
[JAVA] JVM Memory (0) | 2022.02.18 |
---|---|
[Spring] @RestController @Controller 차이가뭐야?? (0) | 2022.01.29 |
[Spring] Hidden Method (0) | 2021.11.23 |
[JAVA] 자바 기초 개념 정리 (0) | 2021.04.24 |
[JAVA] BufferedReaader, InputStream 등등! (0) | 2021.01.10 |
댓글