[Spring] 의존성 주입 테스트(2)

업데이트:

코드에 사용된 어노테이션 정리

Chef클래스

package org.zerock.sample;

import org.springframework.stereotype.Component;

import lombok.Data;

@Component
@Data
public class Chef {

}


Restaurant클래스

package org.zerock.sample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import lombok.Data;
import lombok.Setter;

@Component
@Data
public class Restaurant {
	
	@Setter(onMethod_ = @Autowired)
	private Chef chef;

}



  • Lombok 관련 어노테이션
    • @Setter
    • @Data
    • @Log4j
  • Spring 관련 어노테이션
    • @Autowired
    • @Component
  • 테스트 관련 어노테이션
    • @RunWith
    • @ContextConfiguration
    • @Test




Lombok 관련

Lombok은 컴파일 시 흔하게 코드를 작성하는 기능들을 완성해주는 라이브러리이다.

@Setter

@Setter 어노테이션은 Setter 메서드를 만들어주는 역할을 한다.

@Setter에는 3가지의 속성을 부여할 수 있다.

  1. value : 접근 제한 속성을 의미한다.
  2. onMethod : setter 메서드 생성 시 메서드에 추가할 어노테이션을 지정한다.
  3. onParam : setter 메서드의 파라미터에 어노테이션을 사용하는 경우에 적용한다.

@Data

@Data는 Lombok에서 가장 자주 사용되는 어노테이션이다.
@ToString, @EqualsAndHashCode, @Getter/@Setter, @RequiredArgsConstructor를 모두 결합한 형태로 한 번에 자주 사용되는 모든 메서드들을 생성할 수 있다는 장점이 있다.
세부적인 설정이 필요 없는 경우라면 @Data를 주로 이용한다.


@Log4j

@Log4j는 로그 객체를 생성한다.
Log4j 설정을 이용하고, Log4j가 존재하지 않을 경우에는 @Log를 이용할 수 있다.
@Log를 클래스 쪽에 붙여주면 내부적으로 static final로 Logger 객체가 생성되기 때문에 별도의 로그를 설정할 필요 없이 필요한 코드를 만들어 낼 수 있다.
Spring Legacy Project로 생성한 경우 기본적으로 Log4j 설정이 있기 때문에 추가적인 설정 없이 @Log4j만으로 로그 객체를 준비할 수 있다.



Spring 관련

@Component

@Component는 해당 클래스가 스프링에서 객체로 만들어서 관리하는 대상임을 명시한다.

@Autowired

자신이 특정한 객체의 의존적이므로 자신에게 해당 타입의 빈을 주입해주라는 의미이다.
필요한 객체가 존재하지 않는다면 스프링은 제대로 객체들을 구성할 수 없기 때문에 에러를 발생한다.

테스트 관련

@ContextConfiguration

@ContextConfiguration은 테스트 관련 어노테이션 중 가장 중요한 어노테이션이다.
스프링이 실행되면서 어떤 설정 정보를 읽어 들여야 하는지를 명시한다.
속성으로는 locations를 이용해서 문자열을 배열로 XML 설정 파일을 명시할 수 있고, classes 속성으로 @Configuration이 적용된 클래스를 지정해 줄 수도 있다.

@Runwith

테스트 시 필요한 클래스를 지정한다.
스프링은 SpringJUnit4ClassRunner 클래스가 대상이 된다.

@Test

junit에서 해당 메서드가 jUnit상에서 단위 테스트의 대상인지 알려준다.




단일 생성자의 묵시적 자동 주입

스프링의 의존성 주입은 생성자 주입과 Setter 주입을 사용한다.
Setter주입은 앞의 예제와 같이 setXXX()와 같은 메서드를 작성하고 @Autowired와 같은 어노테이션을 통해서 스프링으로부터 자신이 필요한 객체를 주입하도록 한다.
생성자주입의 경우 객체 생성 시 의존성 주입이 필요하므로 좀 더 엄격하게 의존성 주입을 체크하는 장점이 있다.
기존에 스프링에서는 생성자 주입을 하기 위해서 생성자를 정의하고, @Autowired오 ㅏ같은 어노테이션을 추가해야만 생성자 주입이 이뤄졌지만 스프링 4.3 이후에는 묵시적으로 생성자 주입이 가능하다.





관련 서적 : 코드로 배우는 스프링 웹 프로젝트

태그:

카테고리:

업데이트:

댓글남기기