1. Com.springsource.junit : junit
2. Commons-logging : Spring-context가 사용
3. Mysql-connector : Mysql JDBC
4. Spring-aop : 스프링 기능 자체의 aop
5. Spring-bean : 스프링 빈을 활용하는 경우 필요. 스프링의 XML 설정파일과 자바 애노테이션을 파싱 하는데 필요한 클래스 포함
6. Spring-context : 스프링 코어를 확장한 많은 클래스가 들어 있는데 모든 클래스는 EJB, JNDI(Java Naming Directory Interface), JMX용 클래스와 연동하는데 applicationcontext기능을 사용해야 하며 스프링 리모팅 클래스, 동적 스크립팅 언어(제이루비, 그루비등)와 연동하는 클래스, 빈 유효성검증(JSR-303) API, 스케줄링을 하는 클래스도 포함되어 있다.
7. Spring-core : 모든 스프링 모듈에서 필요한 모듈. 다른 스프링 모듈에서 사용하는 공통 클래스가 포함됨.
8. Spring-dao : EmpltyResultDataAccessException 등 사용을 위한 jar
9. Spring-expression : 스프링 표현언어(SpEL) 지원 클래스 포함.
10. Spring-jdbc : 스프링이 지원하는 jdbc.
11. Spring-test.jar
- @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.
- SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스
- @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일
간단하게 텍스트파일의 숫자를 읽어 더하는 로직을 짜보자.
스프링에는 수십가지의 템플릿/콜백 패턴이 있다 잘 이해하자.
9. BufferedReader : 한줄씩 읽기 편하게 사용
템플릿/콜백 패턴 : 보통 try/catch/finally 블록을 사용하는 코드가 여기저기 반복되는 부분에 사용된다.
* 파일이 정상적으로 닫히지 않고 메소드를 빠져나가는 문제가 발생시 try/catch/finally 블록을 적용해서 어떤 경우에라도 파일이 열렸으면 반드시 닫아주도록 만들어보자.
파일을 읽거나 처리할 때 파일이 정상적으로 닫히지 않고 메소드를 빠져나가는 문제가 발생한다. 어떤 경우에라도 반드시 닫아주도록 코딩해야함.
만들어야 할 기능이 이게 전부라면, 테스트도 만들었고 예외 상황에 대한 처리도 모두 해줬으니 이쯤에서 마무리해도 좋겠지만, 곱셈기능 등 여러가지 처리 기능이 추가될 것이라는 소식이 들어왔다. 템플릿/콜백 패턴을 적용해보자.
* 템플릿/콜백 패턴 적용시 고려해야할 점.
> 템플릿과 콜백의 경계 파악
> 템플릿이 콜백에게 전달하는 내용 파악
> 콜백이 템플릿에게 전달하는 내용 파악
* 템플릿 : IO 연결하는 부분과 닫아주는 부분, 값을 클라이언트에게 리턴
* 콜백 : IO를 이용하여 연산한 값을 템플릿에게 리턴
콜백(변하는 부분(전략:인터페이스)) : 각 라인을 읽어서 알아서 처리한 최종 결과를 템플릿에게 돌려준다(익명내부클래스로 보통 이루어짐).
콜백이 돌려준 결과는 최종적으로 클라이언트에게 전달함.
36~53. 템플릿 : BufferedReader를 만들어 넘겨주는 것 외에는 번거로운 작업의 흐름을 진행하고 모든 처리를 마친 후에 다시 클라이언트에게 돌려줌
8, 22. 콜백 : 읽어서 연산처리(안의 익명내부클래스(자바는 메서드를 인자로 넘길 수 없고, 인터페이스를 구현하면 클래스의 개수가 엄청 늘어나므로))
12,13. 사용할 오브젝트와 파일 이름이 공유되므로 @Before로 멤버변수 세팅
l 템플릿/콜백 패턴을 통해 코드가 상당히 깔끔히 정리되었지만, 또 다시 어떤 공통적인 부분이 없는지 관찰해보자.
Calculator 클래스의 콜백(전략) 부분을 살펴보면 위의 노란 부분을 제외하고는 모두 동일한 것을 알 수 있다.
템플릿/콜백 패턴 : 코드의 특성이 바뀌는 경계를 잘 살피고 이것을 인터페이스를 사용해 분리하는것.
템플릿
14. 파일의 각 라인을 루프를 돌면서 가져오는 것도 템플릿이 담당.
15. 계산하는 부분만 콜백에게 맡긴다.
* 현재 템플릿, 콜백이 만들어내는 결과가 Integer타입으로 거정되어 있다. 만약 결과의 타입을 다양하게 가져가고 싶다면 제네릭스가 필요하다.
* 만약 sum이 1234 로 모두 연결해서 하나의 스트링으로 돌려주는 기능이 필요하다면?
* 반복적인 try/catch/finally 문이 반복된다면 템플릿/콜백 패턴이 제격임
제네릭스를 이용한 콜백 인터페이스
라인별 숫자 더하기
타입이 정해져있지 않을 때 사용한다.
3. <T> : 제네릭 타입을 1개 T로 사용하겠다는 의미
'스프링' 카테고리의 다른 글
[java] 예외처리_낙관적인예외 try catch throws throw (0) | 2020.10.28 |
---|---|
[jdbc] Spring JdbcTemplate (0) | 2020.10.18 |
[jdbc] 콜백의 분리와 재활용 4 (0) | 2020.10.18 |
[jdbc]전략패턴_context분리3 (0) | 2020.10.17 |
[jdbc] 전략패턴_내부클래스2 (0) | 2020.10.17 |