의존성 주입하기

띠로리·2024년 5월 13일

[스프링]

목록 보기
3/11

의존성 주입하기

의존성 주입 : 연관 관계를 컨테이너가 직접 규정하는 것

  • 코드에서 직접적인 연관 관계가 발생하지 않음
  • 각 클래스들의 변경이 자유로워짐
  • loosely coupled, 약한 결합

스프링 프레임워크에서는 각 클래스들의 연관 관계를 클래스들 사이에서 맺는 것이 아니라 스프링 프레임워크에서 설정을 통해 맺어줌으로써 클래스들이 연관 관계를 갖지 않게 구현

의존성을 주입하기 전 게시판 기능

  • 자바를 코드에서 클래스 생성자를 호출해 객체 생성
  • 프로젝트의 규모가 커지만 복잡한 문제 일으킬 수 있음
  • 다른 클래스의 변경 사향이 연속적으로 다른 부분에 영향을 미치게 되면 수정이 힘들다.

인터페이스를 적용한 게시판 기능


각각의 클래스가 인터페이스를 구현하는 구조를 이룬다.

만약 개발 중에 MySQL과 연동하는 기능이 생겼다면, 기존의 클래스를 변경하는 것이 아닌 또 다른 구현 클래스를 생성하면 된다. 다음과 같다.

의존성 주입의 장점

  • 클래스들 간 의존 관계를 최소화하여 코드를 단순화할 수 있다.
  • 애플리케이션을 더 쉽게 유지 및 관리할 수 있다.
  • 객체의 생성, 소멸과 객체 간의 의존 관계를 컨테이너가 제어한다.

의존성 주입을 적용한 게시판 기능

public class BoardServiceImpl implements BoardService {
	priavte BoardDAO boardDAO;
    public BoardServiceImpl(BoardDAO boardDAO) {
    	this.boardDAO = boardDAO;
    } 
// 생성자를 이용한 주입

public class BoardSerivceImple implements BoardService {
    private BoardDAO boardDAO;
    public void setBoardDAO(BoardDAO boardDAO) {
    	this.boardDAO = boardDAO;
    }
...
// setter를 이용한 주입

스프링에서는 객체를 Object라고 부르지 않고 Bean이라고 부른다. 의존 관계를 설정하는 외부 XML파일에서 각각의 객체를 <bean> 태그로 표시하기 때문이다.

profile
차곡 차곡 기록 쌓기

0개의 댓글