본문 바로가기

아는 만큼 보인다

JdbcTemplate (쓰기 편한 database 접속 api) 스프링이 제공해주는 템플릿/콜백 패턴의 라이브러리(?)이다.즉, 변하지 않는 부분을 템플릿으로 미리 만들어주었다.우리가 사용할 때는 변하는 부분(콜백)만 템플릿 메소드에게 파라미터로 전달해주면 끝이다. 사용예)...JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);jdbcTemplate.update("delete from users");jdbcTemplate.update("insert into users(id, name, password) values(?,?,?)", user.getId(), user.getName(), user.getPassword());int count = jdbcTemplate.queryForInt("select count(*) f.. 더보기
템플릿/콜백 패턴 (익명 내부 클래스를 주입하는 전략패턴) 템플릿/콜백 패턴은 전략패턴이다. client가 특정 인터페이스를 구현한 클래스를 생성하여 변하지 않는 클래스에 주입시에.. 익명 내부 클래스를 생성/주입하는 조금 특별한 경우라면.. (스프링에서) 이를 그냥 전략패턴이라고 부르기 보다는 조금 구분짓기 위해 템플릿/콜백 패턴이라 부른다. 템플릿/콜백 패턴에는 몇 가지 특징이 있다. 1. 인터페이스는 단 하나의 메소드를 선언하고 있다. (익명클래스 생성시에 override해서 구현할 메소드는 단 하나다) 2. 익명클래스내의 구현메소드가 client(외부 클래스)의 final 변수를 참조할 수 있다. 사용예) public class TestClient { .... @Test public void testSum() { int sum = calculator.su.. 더보기
전략 패턴 (using Interface) "어떤 클래스가 여러 구현클래스를 갖는 어떤 Interface를 사용한다." 변하지 않는 클래스가..변하는 부분에 대한 메소드를 선언만하고 있는 인터페이스를 사용하고해당 인터페이스에 대입될 구현 클래스는 그때 그때 상황/전략에 따라 결정된다. (생성) (사용) [Client] -----------> [Context/Template/변하지 않는 부분] ------------> [Interface] | | | ----------------- | (생성/ Context에 주입) | | ---------------------------------------> [Implement/변하는부분] [Implement] 더보기
템플릿 메소드 패턴 (abstract, extends) "추상메소드를 활용한 상속관계를 갖는다." 변경이 없을 부분은 부모 클래스가 구현하고..변하는 부분은 부모클래스가 abstract 메소드로 선언하고,자식 클래스가 그 abstract 메소드를 구현한다. 더보기
DI Container = ApplicationContext의 또 다른 이름.. 다시 간단 정리하면 스프링이라는 프레임워크는 개발자의 코드를 수동적으로 만든다. 1. 개발자의 코드는 능동적으로 스스로 실행되지 않는다. (객체화되지 않는다.) --> 스프링 프레임워크가 실행시켜줘야 실행된다. 2. 개발자의 코드는 오브젝트와의 의존관계를 스스로 결정하고 맺지 않는다. --> 스프링 프레임워크가 런타임시에 오브젝트간 의존관계를 맺어준다. --> 스프링이 이런 역할을 해주기 때문에. Bean Factory/ ApplicationContext/ IoC 컨테이너/ SingltoneRegistry 등의 많은 이름(?)으로 불리우는 이 것이 DI 컨테이너라는 또 다른 이름으로 불리우는 이유다. 스프링이 DI Container 로서, Dependency Injection(의존성 주입)을 잘 할 수 .. 더보기
Singleton Registry = ApplicationContext의 또 다른 이름 BeanFactory = ApplicationContext = IoC Container = Spring Container 가 생성/관리하는 빈 오브젝트는 특별한 설정이 없는 한, (빈의 scope이 prototype scope, request scope, session scope 이 아닌 이상..)싱글톤 오브젝트이다. 이러한 이유로 Spring Container을 Sigleton Registry 라고도 부른다. 한 가지 기억해둘 것은 ..빈으로 등록되는 클래스가 디자인 패턴의 하나인 Singleton pattern을 적용한 클래스가 아니다라는 점빈으로 등록되는 클래스는 (private 생성자, public static getInstance() 메소드등이 없는) 평범한 클래스이다. 이 평범한 클래스를 빈 .. 더보기
Annotations 빈설정용 (자바코드로 등록할 빈을 설정) @Configuration * 클래스에 명시되며, 이 클래스는 스프링에서 클래스의 탈을 쓴 설정정보가 된다. * 스프링의 빈팩토리(ApplicationContext)가 빈을 생성하고 관계설정하는데 이 클래스를 설정정보로 사용하도록 알려주자. * xml 설정파일의 라는 root element와 그 역할이 같다. @Bean * 메소드에 명시되며, * 이 메소드는 스프링의 빈팩토리가 빈 객체를 생성하는데 사용된다. * 메소드 이름이 곧 빈의 이름이 된다 * xml 설정파일의 element와 그 역할이 같다. 빈등록용 (스캐너에 의해 자동으로 등록) @Component (@Controller, @Service, @Repository) * 빈스캐너에 의해 빈으로 등록된다 .. 더보기
IoC (Inversion of Control) 일반 제어 : 1. 내가 만든 코드가 라이브러리를 능동적으로 실행시킨다.2. main함수에서 시작한 내 코드가 어플리케이션의 모든 흐름을 제어한다. 역전된 제어 : 1. 프레임워크가 내가 만든 코드/클래스/어플리케이션을 실행시킨다.2. 내가 Container/Context에 설정해 두면, 프레임워크가 그 설정에 맞추어 코드를 제어한다. 간단히 정리해 보면,내가 만든 코드의 제어를 프레임워크에 맡기는 것.. 이 것이 "Inversion of Control" 이다 더보기