스프링(17)
-
스프링 컨텍스트와 싱글톤 레지스트리
전 포스팅에서, 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 -
IOC의 필요성 - 3. 클래스의 분리 및 인터페이스 도입, 관계설정 책임
클래스의 분리 처음에는 독립된 메서드를 만들어서 분리했고, 그 다음에는 상하위 클래스의 상속을 통해 분리했다. 이번에는 아예 상속관계도 아닌 완전히 독립적인 클래스로 만들어보겠다. 그림에 나와있는 것 처럼 SimpleConnectionMaker라는 새로운 클래스를 만들고 DB 생성 기능을 그 안에 넣는다 . 그리고 UserDao에서 SimpleConnectionMaker클래스의 오브젝트를 만들어두고, 이를 각 메서드에서 사용하면 된다. package springbook.user.dao; import springbook.user.domain.User; import springbook.util.SimpleConnectionMaker; import java.sql.*; public class UserDao {..
2022.01.09 -
IOC의 필요성 - 1. JDBC 예제코드 작성 및 메서드 추출(관심사 분리)
1. DAO 제작해보기 사용자 정보를 DB에 저장하고 조회하는 간단한 DAO를 만들어보자 DAO란? Data Access Object,DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트 User 객체 생성 package springbook.user.domain; public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name;..
2022.01.09