본문 바로가기

Spring/토비의 스프링 3.1

1.8 XML을 이용한 설정 1.8.1 XML 설정 DI정보가 담긴 XML : 를 루트 엘리먼트로 사용 여러 개의 을 정의할 수 있음 @Configuration과 @Bean이 붙은 자바 클래스와 설정이 동일 @Congiguration - // @Bean - 에 대응 하나의 @Bean 메소드에서 얻을 수 있는 빈의 DI 정보 빈의 이름 : @Bean 메소드 이름, getBean()에서 사용 빈의 클래스 : 빈 오브젝트를 어떤 클래스를 이용해서 만들지를 정의 빈의 의존 오브젝트 : 빈의 생성자나 수정자 메소드를 통해 의존 오브젝트를 주입 connectionMaker() 전환 클래스 설정과 XML 설정의 대응항목 자바 코드 설정정보 XML 설정정보 빈 설정파일 @Configuration 빈의 이름 @Bean methodName() 빈의 ..
1.7 의존관계 주입(DI) 1.7.1 제어의 역전(IoC)와 의존관계 주입 IoC는 매우 폭 넓게 사용되는 용어이므로, 스프링이 제공하는 IoC 방식은 의존관계 주입(Dependency Injection)이라는 용어를 사용한다. 1.7.2 런타임 의존관계 설정 의존관계 A가 B에 의존한다. B가 변하면 A에 영향을 미친다. UML에서 점선 화살표로 표시함 (A ---> B) 방향성을 가지고 있으므로 반대는 성립하지 않는다. 즉, A가 변해도 B는 영향을 받지 않는다. UserDao의 의존관계 UserDao ---> ConnectionMaker ConnectionMaker 인터페이스가 변하면 UserDao는 변해야한다. 그러나, ConnectionMaker를 구현한 DConnectionMaker에는 의존하지 않으므로 DConnect..
1.6 싱글톤 레지스트리와 오브젝트 스코프 1.6 싱글톤 레지스트리와 오브젝트 스코프 스프링 애플리케이션 컨텍스트와 기존 오브젝트 팩토리의 차이점 오브젝트의 동일성과 동등성 동일성(identity) : 완전히 같은 오브젝트, == 연산자 이용 동등성(equality) : 동일한 정보를 갖고 있는 오브젝트, equals() 연산자 이용 DaoFactory의 userDao()를 여러 번 호출했을 때 동일한 오브젝트가 돌아오는가? userDao()를 호출할 때마다 new 연산자에 의해 새로운 오브젝트가 생성되므로 다른 오브젝트가 리턴될 것이라 예상DaoFactoryIdentityTest.class public class DaoFactoryIdentityTest { public static void main(String[] args) { DaoFacto..
1.5 스프링의 IoC 1.5 스프링의 IoC 스프링의 핵심 빈 팩토리 또는 애플리케이션 컨텍스트 DaoFactory가 하는 일을 일반화한 것 1.5.1 오브젝트 팩토리를 이용한 스프링의 IoC 애플리케이션 컨텍스트와 설정정보 빈(Bean) 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 IoC가 적용된 오브젝트 빈 팩토리(Bean Factory) 빈의 생성과 관계설정 등의 제어를 담당하는 IoC 오브젝트 애플리케이션 컨텍스트(Application Context) : IoC 방식을 따라 만들어진 일종의 빈 팩토리 빈 팩토리와 애플리케이션 컨텍스트는 동일하다고 봐도 무방 설계도 : 애플리케이션 컨텍스트와 그 설정정보 DaoFactory를 사용하는 애플리케이션..
1.4 제어의 역전(IoC) 1.4.1 오브젝트 팩토리 기존 코드의 문제점 문제의 원인(UserDaoTest) Test 수행 클래스 어떤 ConnectionMaker 구현 클래스를 사용할지를 결정하는 역할까지 떠맡음(또 다른 책임) 해결책 관심사의 분리 UserDao와 ConnectionMaker 구현 클래스의 오브젝트를 생성 두 개의 오브젝트를 연결하여 사용될 수 있도록 관계를 맺어주는 클래스 필요 팩토리 팩토리(Factory) 객체의 생성 방법을 결정하고, 그렇게 만들어진 오브젝트를 돌려주는 오브젝트 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽의 역할과 책임을 분리하려는 목적 DaoFactory.class UserDao, ConnectionMaker 생성작업 public class DaoFactory { /* * 팩토..
1.3 DAO의 확장 1.3 DAO의 확장데이터 액세스 로직 + DB 연결 : 상하위 클래스로 분리 UserDao 데이터 액세스 로직을 담당 어떤 API를 사용하여 DB와 통신할 것인가 어떤 SQL을 만들 것인가 어떤 오브젝트를 통해 DB에 저장할 정보를 전달받고 넘겨줄 것인가 NUserDao / DUserDao DB 연결을 담당 DB 연결 방법이 그대로면 코드의 변경이 없음 DB 연결 방법이 바뀌면 NUserDao, DUserDao의 코드만 바뀜 그러나 여전히 상속이라는 방법은 불편하다. 1.3.1 클래스의 분리 두 개의 관심사를 본격적으로 독립시키면서 동시에 손쉽게 확장 가능하도록 분리하자. 일단 두 개의 클래스를 아예 별도의 클래스로 분리하자. SimpleConnectionMaker 클래스를 생성 - DB 생성 기능 U..
1.2 DAO의 분리 1.2.1 관심사의 분리 객체 지향의 세계에서는 모든 것이 변한다. 미래의 변화에 어떻게 대비할 것인가? 변화의 폭을 최소한으로 줄여야한다. 분리와 확장을 고려한 설계 관심사의 분리(Separation of Concerns) 1.2.2 커넥션 만들기의 추출 UserDao의 관심사항 DB와 연결을 위한 커넥션 SQL 문장을 담은 Statement를 만들고 실행 작업이 끝난 후 Statement와 Connection 리소스 닫기 문제점 관심사가 너무 많다. add()메소드와 get()메소드에 DB커넥션을 가져오는 코드가 중복됨 중복 코드의 메소드 추출(메소드 추출기법) 중복되는 코드를 독립적인 메소드로 추출 (getConnection) DB 연결 방법이 바뀌면 getConnection() 메소드만 수정하면 ..
1.1 초난감 DAO 목차 1.1.1 User 1.1.2 UserDao 1.1.3 main()을 이용한 DAO 테스트 코드 1.1.1 User 사용자 정보를 JDBC API를 통해 DB에 저장하고 조회할 수 있는 간단한 DAO 만들기 DAO(Data Access Object) DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트 자바빈 규약을 따르는 오브젝트 User를 생성 자바빈(Java Bean) 다음 두 가지 관례를 따르는 오브젝트를 가리키며, 간단히 빈이라고 부르기도 한다. 디폴트 생성자 : 파라미터가 없는 디폴트 생성자 프로퍼티 : 수정자 메소드(setter) + 접근자 메소드(getter) public class User { String id; String name; String passwor..