자바(20)
-
try/catch/finally로 예외 처리 및 전략 패턴으로 중복 컨텍스트 추출
이전 포스팅에 작성한 코드를 다시 살펴보자 public class UserDao { private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void add(User user) throws SQLException { Connection c = dataSource.getConnection(); PreparedStatement ps = c.prepareStatement("insert into users(id, name, password) values (?,?,?)"); ps.setString(1, user.getId()); ps.setString(2,..
2022.01.16 -
JUnit @Before(@After)사용으로 테스트 코드 중복 제거 및 스프링 테스트 적용
이전 포스팅에 작성했던 테스트 코드를 살펴보자 public class UserDaoTest { @Test public void addAndGet() throws SQLException { ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class); UserDao dao = context.getBean("userDao", UserDao.class); dao.deleteAll(); assertThat(dao.getCount(), is(0)); User user = new User(); user.setId("dkwip"); user.setName("test"); user.setPassword("1234"); dao...
2022.01.16 -
테스트 코드 작성, JUnit 사용과 테스트 주도 개발(TDD)
import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import springbook.user.domain.User; import java.sql.SQLException; public class UserDaoTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); ..
2022.01.15 -
스프링 컨텍스트와 싱글톤 레지스트리
전 포스팅에서, DaoFactory와 같이 직접 클래스간 의존성을 설정해서 사용하는 것과, @Configuration 애너테이션을 추가하여 스프링 애플리케이션 컨텍스트를 통해 사용하는 것의 차이는 무엇일까? 테스트 결과로는 같은데 말이다. 스프링 컨텍스트와 클래스 직접 생성의 차이 차이점을 확인하기 위해 userDao()메서드를 두 번 호출해서 리턴되는 UserDao오브젝트를 비교하자 DaoFactory factory = new DaoFactory(); UserDao dao1 = factory.userDao(); UserDao dao2 = factory.userDao(); System.out.println(dao1); System.out.println(dao2); 출력 결과에서 알 수 있듯이, 두 개는 ..
2022.01.15 -
스프링의 애플리케이션 컨텍스트
오브젝트 팩토리를 이용한 스프링 IOC 기존에 제작한 DaoFactory를 스프링에서 사용이 가능하도록 변신시켜보자. 스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈(Bean) 이라고 한다. 자바 빈 또는 엔터브라이즈 자바빈(EJB)에서 말하는 빈과 비슷한 오브젝트 단위의 예플리케이션 컴포넌트를 말한다. 동시에 스피링 빈은 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트를 가리키는 말이다. 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리(bean Factory) 혹은 애플리케이션 컨텍스트(application context)라고 부른다. 애플리케이션 컨텍스트는 별도의 정보를 참고해서 빈의 생성, 관..
2022.01.09 -
IOC의 필요성 - 4. 오브젝트 팩토리, 제어관계 역전
오브젝트 팩토리 지금까지는 문제가 많은 초난감 DAO를 깔끔한 구조로 리펙토링하는 작업을 수행했다. 하지만, 여태껏 얼렁뚱땅 넘긴 게 하나 있다. 바로 클라이언트인 UserDaoTest이다. 기존에 코드의 성능 및 동작여부를 테스트하면 UserDaoTest가 갑자기 어떤 ConnectionMaker 구현 클래스를 결정해하는 책임을 엉겁결에 떠맡았다. 즉, 관계설정을 결정해하는 책임을 담당할 클래스를 생성해야한다. 이 클래스의 역할은 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 것인데, 이런 일을 하는 오브젝트를 흔히 팩토리라고 부른다. DaoFactory를 생성하여 기존에 UserDaoTest가 책임지고 있었던 관계 설정 부분을 옮기자 package springbook.user.dao..
2022.01.09