TDD (테스트 주도 개발, Test Driven Development) 와 JUnit
TDD란?
- 테스트 코드를 먼저 만들고, 테스트를 성공하게 해주는 코드를 작성하는 방식의 개발 방법
- 테스트 코드가 기능 정의서처럼 기능함
- 테스트를 먼저 만들고, 테스트가 성공하도록 하는 코드를 만드는 식으로 진행하기 때문에, Test coverage 영역이 높아진다.
- 테스트를 작성하는 시간과, application 코드를 작성하는 시간의 간격이 짧아진다.
TDD란?
기존에 DB connection을 만들어주기 위하여, 직접 DB-specific한 DriverManager로부터 DB connection을 가져왔으나, 실제로 java에서는 DB connection을 가져오는 기능과 여러가지 부가적인 기능을 추상화한 DataSource interface가 존재한다.
spring은 java annotaion 기반으로 DI 의존관계 설정 class를 만드는 것 이외에도 ,
xml을 활용하여 DI 의존관계 설정 class를 만드는 것을 지원한다.
xml의 이용할 경우 별도의 compile이 필요하지 않다는 장점을 가지고 있다.
annotaion의 @Configuration 이 <beans> tag, @Bean 이 <bean> tag와 대응된다.
@Bean에서 bean이름이 될 method name은 xml에서 <bean> tag 의 id attribute,
@Bean에서 bean Class type은 xml에서 <bean> tag의 class attribute 가 된다.
예를 들어
1 |
|
위 자바 코드는 아래의 xml 기반의 설정파일과 동일한 의미이다.
1 | <beans> |
다른 Bean 과의 관계설정은 xml에서
예를 들어
1 | public class UserDao{ |
위 자바 코드는 아래의 xml 기반의 설정파일과 동일한 의미이다.
1 | <beans> |
application context 를 xml 설정파일로 만드는 방법은 간단하다 다른 구체 class를 사용하면 된다.
1 | GenericXmlApplicationContext("applicationContext.xml"); |
최종적으로 현재 userDao 를 xml설정파일로 bean으로 등록하였다.
1 | <!-- applicationContext.xml --> |
1 | public static void main(String[] args) { |
Dependency Injection의 정의는 다음과 같다.
program run time 시에 의존관계를 맺는 대상인 dependent object 와 , 그것을 사용하는 주체인 client object를 연결시켜주는 작업
DI는 정리하면 다음과 같은 3 조건을 충족시키는 작업을 말한다.
토비의 spring
이전까지는 Spring 을 적용하지 않고, IoC에 대해서 살펴보았다.
지금부터는 Spring이 IoC를 어떤형태로 구현하였는지 살펴보겠다.
그전에 spring에서 사용하는 용어를 정리하면 다음과 같다.
: spring이 제어권을 가지고 직접 만들고 , 관계를 설정하는 객체
: Bean의 생성과 관계설정과 같은 제어를 담당하는 IoC 객체
(=이를 확장된 의미에서는 Application Context라고 한다.)IoC(Inversion of Control)란?
프로그램의 제어흐름을 뒤바꾸는 것이다.개발자가 직접 객체간의 관계설정이나 객체의 생명주기를 조절하는 것이 아니라, container와 같은 다른 대상이 이를 제어하는 것을 말한다. Framework가 IoC가 적용된 기술이다. 정확히 말하면 spring framework는 IoC를 효율적으로 적용한 것이지, spring 없이도 IoC를 구현할 수 있다.
chapter1에서는 Spring FrameWork의 관심사인 Object 설계와 구현 및 동작원리에 초점을 두고 있다. Dao 설계를 이상적인 설계인 ‘변경이 용이한 구조’를 만들기 위해 순차적으로 코드를 Refactorying 하여서 가장 이상적인 설계를 설명하고 이와 밀접히 관련되어 있는 스프링의 주요 개념인 IoC(Inversion of Control) 개념을 소개한다.