ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] DI(Dependency Injection) 란?
    Spring/용어 2020. 3. 22. 16:12
    반응형

    DI(Dependency Injection) 란?

    IoC(Inversion of Control)이라고도 표현하며, 객체 간의 의존 관계를 객체 자신이 아닌 외부의 조립기가 수행해 준다는 개념입니다.

     

    의존할 객체를 지정하는 방법

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 1.객체를 직접 만들어 사용
    public class BoardService {    
        private BoardDao boardDao = new BoardDao();
    }
     
    // 2.객체를 주입 받아 사용
    public class BoardService {
     
        private BoardDao boardDao;
        
        // 생성자에서 의존하는 객체를 전달받음
        public BoardService(BoardDao boardDao) {
            this.boardDao = boardDao;
        }
    }
    cs
     BoardDao 객체를 주입 받아 사용하는 경우 BoardServiceImpl 클래스 코드는 BoardDao 객체를 생성하는 코드가 포함되지 않습니다. 대신, 조립기의 역할을 하는 Assembler가 BoardDao 객체를 생성한 뒤 BoardServiceImpl 객체에 전달해 주게 됩니다. 이렇게 조립기가 의존 관계를 관리해 주는 방식을 DI(Dependency Injection)이라고 합니다.

     

    Spring에서의 DI

     스프링은 설정 파일이나 어노테이션을 통해서 객체 간의 의존 관계를 설정할 수 있도록 지원하고 있습니다. 따라서, 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없습니다.

     

    DI을 적용하는 방법

    1.Field Injection

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Service
    public class BoardService {
     
        @Autowired
        private BoardDao boardDao;
        
        public void doSomething() {
            
        }
    }
    cs

    2.Setter based Injection

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @Service
    public class BoardService {
     
        private BoardDao boardDao;
     
        @Autowired
        public void setBoardDao(BoardDao boardDao) {
            this.boardDao = boardDao;
        }
     
        public void doSomething() {
     
        }
    }
     
    cs

    3.Constructor based Injection

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Service
    public class BoardService {
     
        private final BoardDao boardDao;
     
        @Autowired
        public BoardService(BoardDao boardDao) {
            this.boardDao = boardDao;
        }
     
        public void doSomething() {
     
        }
    }
    cs

     

    반응형

    'Spring > 용어' 카테고리의 다른 글

    [Spring] AOP(Aspect Oriented Programming) 란?  (0) 2020.03.22

    댓글

Designed by Tistory.