TDD (테스트 주도 개발, Test Driven Development) 와 JUnit

TDD란?

  • 테스트 코드를 먼저 만들고, 테스트를 성공하게 해주는 코드를 작성하는 방식의 개발 방법
  • 테스트 코드가 기능 정의서처럼 기능함
  • 테스트를 먼저 만들고, 테스트가 성공하도록 하는 코드를 만드는 식으로 진행하기 때문에, Test coverage 영역이 높아진다.
  • 테스트를 작성하는 시간과, application 코드를 작성하는 시간의 간격이 짧아진다.
Read more

Spring Configuration - Xml

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
2
3
4
@Bean 
public ConnectionMaker connectionMaker(){
return new DconnectionMaker();
}

위 자바 코드는 아래의 xml 기반의 설정파일과 동일한 의미이다.

1
2
3
<beans>
<bean id="connectionMaker" class="com.springstudy...DconnectionMaker">
<beans>

다른 Bean 과의 관계설정은 xml에서 tag를 통해 이루어질 수 있다. property tag의 name attribute는 property 이름 , ref attribute는 setter method를 통해 주입해줄 bean 객체의 이름이다.

예를 들어

1
2
3
4
5
6
7
8
public class UserDao{

private ConnectionMaker connectionMaker;

public void setConnectionMaker(ConnectionMaker connectionMaker){
this.connectionMaker=connectionMaker;
}
}

위 자바 코드는 아래의 xml 기반의 설정파일과 동일한 의미이다.

1
2
3
4
5
6
<beans>
<bean id="userDao" class="com.springstudy...UserDao">
<!-- name : property 명 , ref : bean 객체 이름 -->
<property name="connectionMaker" ref="connectionMaker" />
</bean>
<beans>

application context 를 xml 설정파일로 만드는 방법은 간단하다 다른 구체 class를 사용하면 된다.

1
GenericXmlApplicationContext("applicationContext.xml");

최종적으로 현재 userDao 를 xml설정파일로 bean으로 등록하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- applicationContext.xml  -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="connectionMaker" class="com.springstudy.ioc.DconnectionMaker"></bean>
<bean id="userDao" class="com.springstudy.ioc.UserDao">
<property name="connectionMaker" ref="connectionMaker"></property>
</bean>

</beans>
1
2
3
4
5
6
public static void main(String[] args) {
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
UserDao userDao = context.getBean("userDao", UserDao.class);
System.out.println("userDao = " + userDao);

}

Denpendency Injection & Dependency Lookup

  • Dependency Injection
    Spring IoC의 동작원리는 주로 DI(Dependency Injection)이다. Spring 공식 Doc보면, IoC를 DI라고 표현하기도 한다.

Dependency Injection의 정의는 다음과 같다.


Dependency Injection :

program run time 시에 의존관계를 맺는 대상인 dependent object 와 , 그것을 사용하는 주체인 client object를 연결시켜주는 작업


DI는 정리하면 다음과 같은 3 조건을 충족시키는 작업을 말한다.

  1. class model(class diagram)에는 의존관계가 들어나지 않음 , 즉 client가 Interface에 의존하고 있어야 한다.
  2. run time시 의존관계는 container와 같은 다른 주체가 결정한다.
  3. 의존관계는 사용할 dependent object의 reference를 외부에서 주입해줌으로서, 만들어진다.
Read more

Spring IoC container

토비의 spring
이전까지는 Spring 을 적용하지 않고, IoC에 대해서 살펴보았다.
지금부터는 Spring이 IoC를 어떤형태로 구현하였는지 살펴보겠다.
그전에 spring에서 사용하는 용어를 정리하면 다음과 같다.


- Bean

: spring이 제어권을 가지고 직접 만들고 , 관계를 설정하는 객체


- Bean Factory

: Bean의 생성과 관계설정과 같은 제어를 담당하는 IoC 객체

(=이를 확장된 의미에서는 Application Context라고 한다.)
Read more

IoC(inversion of control)의 개념

간단정리

IoC(Inversion of Control)란?
프로그램의 제어흐름을 뒤바꾸는 것이다.개발자가 직접 객체간의 관계설정이나 객체의 생명주기를 조절하는 것이 아니라, container와 같은 다른 대상이 이를 제어하는 것을 말한다. Framework가 IoC가 적용된 기술이다. 정확히 말하면 spring framework는 IoC를 효율적으로 적용한 것이지, spring 없이도 IoC를 구현할 수 있다.

Read more

Dao의 점진적인 Refactorying을 통해 알아보는 객체지향설계원칙

간단정리

chapter1에서는 Spring FrameWork의 관심사인 Object 설계와 구현 및 동작원리에 초점을 두고 있다. Dao 설계를 이상적인 설계인 ‘변경이 용이한 구조’를 만들기 위해 순차적으로 코드를 Refactorying 하여서 가장 이상적인 설계를 설명하고 이와 밀접히 관련되어 있는 스프링의 주요 개념인 IoC(Inversion of Control) 개념을 소개한다.

Read more