DI의 방식 중 필드 vs 생성자 주입 방식

2023. 4. 11. 18:54·스파르타 기술면접
💡 DI는 객체간의 결합도를 줄여 의존관계를 느슨하게! →유연한 대처가 가능

DI의 방식

필드 주입

의존성을 나타내는 필드에 @Autowired어노테이션을 사용해서 주입

  • 코드 작성이 간결
  • 오류를 찾기 어렵고 의존성 주입의 순서를 보장하기 어려움

생성자 주입

의존성을 주입하는 생성자를 정의하고, @Autowired 어노테이션을 사용하여 의존성을 주입

  • 오류를 찾을 수 있고, 의존성 주입의 순서를 보장
  • 생성자를 통한 필수 의존성을 전달하므로, 의존성 누락에 대한 예방 가능

 

프로퍼티를 통한 의존성 주입

applicationContext.xml에 <property> 태그를 사용하여 의존성을 주입 →객체 생성 시 주입된 객체도 함께 생성됨

 

인터페이스를 통한 의존성 주입

추상화 개념을 이용한 의존성 주입 방식

 

의존성을 주입하는 대상 클래스가 인터페이스를 구현하고 있어야 함. 이 때, 구현체 클래스를 직접 주입하는 대신, 해당 인터페이스를 주입함으로써 유연성과 확장성을 높일 수 있다.

 

**ex>**서비스 클래스가 데이터베이스와 의존성을 가지고 있다고 가정. 서비스 클래스는 데이터베이스와 직접적으로 의존하므로 인터페이스를 이용한 의존성 주입 방식을 적용하면, 서비스 클래스는 인터페이스를 의존하도록 변경할 수 있다. 이렇게 하면, 추후에 데이터베이스를 변경하더라도 서비스 클래스의 코드를 수정하지 않아도 됨. →최종 프로젝트에 적용했던 방식…

 

예시

필드 주입 & 생성자 주입

//필드 주입
public class PostService {
	@Autowired
	private PostRepository postRepository;
}

//생성자 주입
public class PostService {
	private final PostRepository postRepository;
	@Autowired
	public PostService (PostRepository postRepository) {
		this.postRepository = postRepository;
	}
}

노션 링크

'스파르타 기술면접' 카테고리의 다른 글

List / Set / MAp, HashMap  (0) 2023.04.16
Filter / Interceptor / AOP  (0) 2023.04.11
DI 방식, FIlter / Interceptor / AOP  (0) 2023.03.30
MSA , 제네릭(3일차)  (0) 2023.03.30
DI , DB에서의 인덱스 사용(2일차)  (0) 2023.03.30
'스파르타 기술면접' 카테고리의 다른 글
  • List / Set / MAp, HashMap
  • Filter / Interceptor / AOP
  • DI 방식, FIlter / Interceptor / AOP
  • MSA , 제네릭(3일차)
yeah구리
yeah구리
백엔드를 공부하는 초심자입니다.
  • yeah구리
    개발일지_헤맨만큼 내땅이다
    yeah구리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 스파르타 부트캠프(spring) (75)
      • 스파르타 기술면접 (10)
      • 코딩연습 (0)
      • 항해 (10)
      • 개발일지 (4)
        • 개인 회고 (1)
        • 개발로그 (실무) (2)
      • 공부노트 (0)
      • 코딩테스트 (0)
        • 프로그래머스 (0)
        • 백준 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    비전공개발자 #개발로그 #커리어
    X(Twitter) API #캐싱 #트러블슈팅 #개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeah구리
DI의 방식 중 필드 vs 생성자 주입 방식
상단으로

티스토리툴바