'의존성 주입'에 해당되는 글 1건

  1. 2014.10.14 DI;Dependency Injection - 의존성 주입 2
2014. 10. 14. 19:58


사용 목적 


- 모듈간 결합도를 낮추기 위해 사용(종속성 제거

- 협업, 유지보수 용이

 


(설명)

A class B class가 있습니다. B class의 구현을 위해 A객체가 필요하다면 B class A class에 대한 Dependency(의존성)을 가진다고 말합니다.따라서 B class의 구현을 위해서는 A Bean이 필요한데 필요하다고 해서 직접 A Bean생성(new A() 방식)을 하지 않고 다른 방법을 통해 A Bean를 주입시켜 주는 것을 DI(의존성 주입)이라고 말합니다.

 

 

의존성 주입 3가지 패턴

(3 Patterns of Dependency Injection by Martin Fowler)

 

1) 생성자를 통한 주입(Injection by Constructor) : 비추

 

- A class의 생성자를 만들어 B class에 의존성을 주입

 

2) 셋터 메서드를 통한 주입(Injection by Setter method)

 

- A class(멤버)필드에 대한 setter()를 만들어 의존성 주입

 

3) 인터페이스를 통한 주입(Injection by Interface)

 

- 인터페이스에 의존성을 주입하는 추상메서드를 만들고 실행시 이 인터페이스를 

구현함으로써 의존성을 주입

 

 

 

<의존성 주입 예시>

 

BoardDAO 인터페이스

 

package dao;

import java.util.List;

import vo.Board;

 

//확장성을 휘해 BoardDAO를 인터페이스 생성

public interface BoardDAO {

         public List<Board> selectBoardList();

}//BoardDAO interface end

 

BoardDAO 인터페이스 구현 클래스

 

package dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import vo.Board;

 

//인터페이스 BoardDAO의 구현을 위한 BoardDAOImpl class

public class BoardDAOImpl implements BoardDAO {

 

// BoardDAO class SqlSession Class에 의존성을 가짐

// 1) SqlSession property 선언

// 2) SqlSession class setter()를 통해 의존성 주입

private SqlSession session;

public void setSession(SqlSession session) {

this.session = session;

}

 

//구현객체는 반드시 추상메서드를 구현해야합니다.

         public List<Board> selectBoardList(){

        

//의존성 주입을 했기 때문에 session객체를 바로 쓸 수 있습니다.

return session.selectList("board.selectBoardList");

         }; // selectBoardList()

}//BoardDAOImpl class end

 

 

BoardService 인터페이스

 

package service;

import java.util.List;

import vo.Board;

 

//BoardService interfaceTransaction 관리를 위해 만듭니다.

public interface BoardService {

public List<Board> getList();

}//BoardService interface end

 

BoardService 인터페이스 구현 클래스

 

package service;

import java.util.List;

import vo.Board;

import dao.BoardDAO;

 

//BoardService interface구현을 위한 BoardServiceImpl class

public class BoardServiceImpl implements BoardService {

 

 //BoardService BoardDAO에 대한 의존성을 가짐

          //따라서 BoardDAO Property를 선언해주고

 //setter를 통해 의존성 주입

         private BoardDAO dao;

 

 public void setDao(BoardDAO dao){

                   this.dao = dao;

 }

 

//구현객체는 반드시 추상메서드를 구현해야합니다.

 public List<Board> getList(){

   //의존성 주입을 했기 때문에 dao객체를 바로 쓸 수 있습니다.

                   return dao.selectBoardList();

 }

}//BoardServiceImpl class end


 

Tip) method명 짓는 노하우

 

- DAO SQL구문과 직접 관련되므로 메서드명에 select, update,delete,insert를 쓰면 편리함 ()selectList, selectOne

 

- Service DAO를 호출하기 때문에 굳이 SQL를 몰라도 됩니다.메서드명 규칙는 의미에 맞게 해줍니다. ()getList,getBoard,getUserInfo





크리에이티브 커먼즈 라이선스


Posted by 루피아빠