본문 바로가기
public void static main()/Spring

[Spring] DI (Dependency Injection)

by 햄리뮤 2021. 11. 11.
반응형

오늘은 Spring책으로 공부해봤다!

 

https://www.youtube.com/watch?v=O9mqe53syGc

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() > Spring' 카테고리의 다른 글

[Spring] @RestController @Controller 차이가뭐야??  (0) 2022.01.29
[Spring] Hidden Method  (0) 2021.11.23

댓글