Backend/Java

[Java] 의존성 주입(DI) 장점, 방법, 비교

2024. 12. 12. 10:00·Backend/Java

의존성 주입(DI)이란?

객체가 사용(의존)할 파라미터를 외부에서 선언하고, 이를 주입받아서 사용하는 방법!

의존성 주입의 장점

응집도를 높이고, 결합도를 낮출 수 있다.
1. 유지보수가 용이하다.
2. 재사용성이 높은 코드가 된다.
3. 기능이 분리되어 가독성이 높아진다.


의존성 주입 종류

  1. Constructor (생성자)
  2. Setter (수정자)
  3. Field (필드)

1. Constructor (생성자)

public class User {
	private String email;
    private String password;
    
    @Autowired
    public User(String email, String password){
    	this.email = email;
        this.password = password;
    }
}

2. Setter (수정자)

public class User {
	private String email;
    private String password;
    
    @Autowired
    public void setEmail(String email){
    	this.email = email;
    }
    
    @Autowired
    public void setPassword(String password){
    	this.password = password;
    }
}

3. Field (필드)

public class User {
	@Autowired
    private String email;
    
    @Autowired
    private String password;
}

그럼 어떤 의존성 주입을 활용하는 게 좋을까?

결론적으로 말하면, 생성자 주입이 가장 안전하다.
1. NullPointerException을 사전 방지하여 Database를 보호가능
2. final로 필드를 선언하여 활용 - 데이터를 보호할 수 있다.
3. 코드를 조금 더 간결하게 만들기 위한 Lombok 어노테이션을 활용할 수 있다.
4. 단위 테스트 코드를 작성하기 편리하다.
5. 객체 생성 시점에서 미리 순환 참조를 발견하고 방지할 수 있다. (스프링/스프링부트에서 해당 됨)





참고한 글 :
https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/
https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/

저작자표시 비영리 변경금지

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

[Java] PriorityQueue(우선순위 큐) 사용하기  (1) 2024.12.13
[Java] Char 문자를 숫자로 변환하는 방법 (CHAR - '0' 이 뭘까?)  (0) 2024.12.07
'Backend/Java' 카테고리의 다른 글
  • [Java] PriorityQueue(우선순위 큐) 사용하기
  • [Java] Char 문자를 숫자로 변환하는 방법 (CHAR - '0' 이 뭘까?)
sol_git
sol_git
Full-Stack을 꿈꾸는 Junior Developer💖
  • sol_git
    솔깃한 Dev
    sol_git
  • 글쓰기 관리자
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • Frontend (13)
        • Javascript (1)
        • React (9)
        • Vue (1)
        • Svelte (1)
      • Style Sheet (0)
        • Sass (0)
      • Backend (4)
        • Java (3)
        • Python (1)
        • Spring Boot (0)
      • AI (0)
        • LLM (0)
        • Gen AI (0)
      • DevOps (16)
        • Git (16)
        • Kubernetes (0)
      • Cloud (0)
        • AWS (0)
      • DBMS (2)
        • MySQL (1)
        • PostgreSQL (1)
      • IDE & Tools (3)
        • IntelliJ (1)
        • VS Code (1)
        • Tool (1)
      • OS (2)
        • Mac (2)
      • Project 일기 (0)
  • 블로그 메뉴

    • 방명록
  • 링크

    • Github
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
sol_git
[Java] 의존성 주입(DI) 장점, 방법, 비교
상단으로

티스토리툴바