본문 바로가기

개발중/Spring

[ 스프링 ] 의존성 주입 방법 ?

728x90
반응형

스프링 의존성 주입 하는 방법


🔵 어노테이션

의존성을 연결하는 데는 스프링에서 제공하는 @Autowired, @Required 두 어노테이션을 사용할 수 있다.

 

@Autowired

>> 생성자와, 메소드, 필드에 적용할 수 있다.
@Required

>> 새터 메소드에 적용할 수 있다.

🔵 의존성 주입하는 방법 세가지

 

  1. 생성자 기반의 주입
  2. 세터 기반 / 메소드 기반의 주입
  3. 필드 기반의 주입

🔵 생성자 기반의 주입

 

이 방법은 이름에서 알 수 있듯이 이 유형의 주입은 생성자를 통해 수행된다.

 

@Autowired
public BinsooService( BinsooRepository binsooRepository ){

	this.binsooRepository = binsooRepository
    
}

🔵 세터 기반 / 메소드 기반의 주입

 

이 방법은 메소드를 선언하고 ( 일반적으로는 세터 메소드에 이용 ) @Autowired  또는 @Required 어노테이션을 적용하는 것이다.

 

세터 메소드의 주입

 

public class BinsooService(){
	
    @Required
    public void setBinsooRepository( BinsooRepository binsooRepository ){
    	this.binsooRepository = binsooRepository
    }

}

 

다른 이름 메소드의 주입

 

public class BinsooService(){
	
    @Autowired
    public void binsooSetSetSet( BinsooRepository binsooRepository ){
    	this.binsooRepository = binsooRepository
    }

}

🔵 필드 기반의 주입

 

이 방법은 @Autowired 어노테이션으로 필드에 직접 적용할 수 있다. 

이 방법을 활용하면 세터 메소드를 선언할 필요가 없다.

 

@Autowired
private BinsooRepository binsooRepository;

🔴 의존성 주입 모범 사례

 

  • 반드시 필요한 의존성
    • 반드시 필요한 의존성에 있어서는 항상 생성자를 통해서 주입해야 한다. 이를 통해 생성 이후에 인스턴스는 완전히 초기화 되고 주입된 의존성은 읽기 전용이 된다. ( read only )

 

  • 필수가 아닌 선택적인 의존성
    • 필수가 아닌 선택적인 의존성은 세터 / 메소드를 통해 주입할 수 있다.

 

  • 피해야 하는 의존성
    • 필드 기반의 주입은 사용하지 말아야 한다. 스프링은 자바 리플랙션 (  Reflection ) 으로 필드를 주입하고, 필드 주입 방식을 사용하는 것은 위험한 것으로 간주 된다.
    • 피해야 하는 이유
      • 의존성을 초기화 하고 관리하는 방법과 이들의 의존 관계와 같은 의존성의 정보를 숨긴다.
      • 필드 주입은 매우 간단하다. 필드를 정의하고 @Autowired 또는 @Resource 어노테이션을 적용만 하면 된다. 개발자가 이 방법에 중독되어 너무 많은 의존성을 추가하면 단일 책임 원칙 ( SRP ) 를 위반 할 수 있다.

728x90
반응형