[Spring] DI(Dependency Injection) 란 ?

2023. 9. 3. 20:13·Backend/Spring
728x90

DI란 ? 

-> Dependency Injection, 즉 의존성 주입이라는 뜻이다.

예를 들어 베터리 분리형 장난감은 베터리가 떨어지면 베터리만 교체하면 되는 형식으로 더 효율적이다.

 

객체 지향 프로그래밍에서 사용되는 중요한 디자인 패턴 중 하나로, 

객체를 다 독립시켜 유연성 있게 필요한 것을 추가, 삭제 등을 하여 유지보수가 가능하게 하는 것이다.

 

DI는 객체가 필요로 하는 다른 객체를 직접 생성하는 것이 아니라, 외부에서 주입받는 방식으로 의존성을 관리한다. 

즉, 어떤 객체가 다른 객체에 의존할 때, 이 의존성을 코드 내에서 하드 코딩하는 대신 외부에서 필요한 의존 객체를 제공받는다.

 

 

1. 생성자 주입

@Controller
public class Controller{
	private Service service;
    
    @Autowired
    publice Controller(Service service){
    this.service = service;
    }
}

> 해당 class의 생성자의 매개변수로 객체를 받고, @Autowired 어노이테이션을 작성하는 방법

spring 3,4 이후로는 클래스 내에 생성자가 하나이고, 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면 

@Autowired 생략이 가능하다.

 

생성자 주입은 객체 지향 프로그래밍의 원칙을 따르고 코드의 안전성, 가독성, 유지보수성, 테스트 용이성을 향상시키는데 도움이 되며,

DI 프레임워크와의 통합도 원활하게 이루어집니다. 가능하면 생성자 주입을 사용하는 것이 좋다.

 

2. 필드 주입

@controller
public class Controller{
	@Autowired
    private Service service;
}

> 필드 부분에 @Autowired 어노이테이션을 작성해 의존성을 주입하는 방식

장점으로는 코드가 간결하고 편하지만, 단점으로는 의존관계를 정확하게 파악하기가 힘들다.

 

3. 수정자(setter)주입

@Controller
public class Controller{

	private Service service;
    
    @Autowired
    publice setService(Service service){
    	this.service = service;
    }
 }

> set메서드에 @Autowired 어노이테이션을 작성해 의존성을 주입하는 방식

 

-

 

@Autowired : 의존성을 주입해달라는 요청을 뜻함

 

 

 

 

728x90

'Backend > Spring' 카테고리의 다른 글

[Spring] Socket을 이용해서 채팅 웹페이지 만들기 ! (1)  (2) 2023.09.10
[Spring] 내가 보려고 만든 spring 용어 정리 ( 9월 25일 수정 )  (0) 2023.09.04
[Spring] Spring Project - MVC 배우기 !  (0) 2023.09.03
[Spring] eclipse / STS / Lombok.jar 설치하기  (0) 2023.09.03
[Spring] 프로젝트 생성  (2) 2023.08.31
'Backend/Spring' 카테고리의 다른 글
  • [Spring] 내가 보려고 만든 spring 용어 정리 ( 9월 25일 수정 )
  • [Spring] Spring Project - MVC 배우기 !
  • [Spring] eclipse / STS / Lombok.jar 설치하기
  • [Spring] 프로젝트 생성
hyeminyy
hyeminyy
Full Stack Developer | consistency
  • hyeminyy
    maemingu
    hyeminyy
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • Backend (46)
        • Java (15)
        • JSP & Servlet (5)
        • EL & JSTL (3)
        • Spring (15)
        • DataBase (4)
        • 알고리즘 (4)
      • Frontend (11)
        • Next.js (5)
        • JavaScript (3)
        • Vue.js (3)
      • IT_STUDY (21)
        • 정보처리기사 (9)
        • SQLD (8)
        • 개인공부 (4)
      • Developer! (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Notion-portfolio
  • 공지사항

  • 인기 글

  • 태그

    httpServletRequest
    Java
    프론트엔드
    jstl
    백앤드개발자
    sqld자격증
    Spring
    Servlet
    뷰
    정보처리기사
    NextJS
    백앤드
    MVC
    springProject
    코딩테스트
    정처기
    JSP
    springboot
    정보처리기사 실기
    정보처리기사 실기 요약
    정처기 실기
    개발자
    정처기 실기 요약
    알고리즘
    정처기 필기 요약
    Next.js
    SQLD
    el
    SQL
    정처기 요약
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeminyy
[Spring] DI(Dependency Injection) 란 ?
상단으로

티스토리툴바