반응형

Template이란??
일상생활에서도 많이 쓴다. 특히 PPT만들때 많이들 사용하는것처럼 
무엇인가 정형화된 틀이라고 생각하면 될것 같다. 

상위클래스에서 abstract 메소드를 정의해서 상속받는 하위 클래스들에게 그것을 구현할
책임을 부여해주는것... 이게 Template Method 패턴의 핵심인듯 하다.
뭐 책을 보니 이것을 Subclass Responsibility라고 한다고 하네???

Abstract Class A{
abstract method1;
template method;
}

ConcreateClass extends A{
method{....}
}

뭐 이런 구조다...그냥 살펴보면 참 간단한 패턴.. 하지만 실제 적용하려면... 참 머리 뽀개지겠구나..
그리고 예전에 내가 생각없이 Copy&Paste했던 코드들이 머리속에 떠오른다.. 
정말 무식하게 똑깥이 쓸때없이 복사했던 코드들...

상위 클래스에 좀더 많은것을 두느냐, 아니면 하위클래스에서 좀더 많은 기능을 두느냐는 
어떤 프로그램이냐에 따라 달라지겠지만 적정선에서 분배하지 않으면 다시 같은 기능들이
한쪽에 몰려서 수정할때 걷잡을수 없는 노가다를 초래하게 만들것 같다.

하지만 template이라는 이름 답게 상위클래스에는 틀만 갖춰두고
최대한 하위 클래스에서 기능에 맞게 구현을 하는것이 맞지 않을까 생각이 든다.
728x90
반응형

'Development > Design Pattern' 카테고리의 다른 글

Strategy Pattern  (0) 2013.07.02
[데코레이터 패턴]  (0) 2013.06.26
Factory Method Pattern  (0) 2011.08.30
Decorator Pattern  (0) 2011.08.30
반응형

Excpetion 처리시 아무생각 안하고 e.getStackTrace()를 사용했는데.
이렇게 처리하면 스택을 확인해서 처리하게 되기 때문에 시간도 많이걸리고
콘솔에 찍히는 내용도 뭔지 모르게 된다. 

  1. public class LogTest {
  2.     private static final Logger logger = Logger.getLogger("LogTest");
  3.     public static void main(String[] args) {
  4.         try{
  5.             int i = 0;
  6.             int j = 3/i;
  7.         }catch (Exception e) {
  8.             StackTraceElement[] ste = e.getStackTrace();
  9.             String className = ste[0].getClassName();
  10.             String methodName = ste[0].getMethodName();
  11.             int lineNumber = ste[0].getLineNumber();
  12.             String fileName = ste[0].getFileName();
  13.             logger.severe("Exception : " + e.getMessage());
  14.             logger.severe(className + "." + methodName + " " + fileName + " " + lineNumber + " line");
  15.         }
  16.     }
  17. }
이렇게 처리하면 속도도 빠르고 내용도 잘 알아볼수 있다.
(출처 : "자바성능을 결정짓는 코딩습관과 튜닝이야기") 


728x90
반응형
반응형
스프링은 4종류의 와이어링을 제공한다.

1. byName (autowire="byName")
    property 이름과 동일한 빈을 와이어링 해준다.
    이름이 반드시 같아야한다.

2. byType
    property type과 동일한 빈을 와이어링 해준다.
    할당 가능한 타입의 빈이 둘 이상일 경우에는 예외 발생시킨다.

3. constructor
   해당 빈의 생성자에 맞는 빈을 자동으로 선택해준다.

4. autodetect
    컨테이너가 알아서 결정해준다.
    최초에는 constructor 방식을 먼저 적용, 그다음에 byType 방식을 시도한다.

오토와이어링 문제점.
- 명확성 결여된다. 
728x90
반응형
반응형
단일 서블릿 컨텍스트 구성 방법
  1. <servlet>
  2.     <servlet-name>spring</servlet-name>
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4.     <init-param>
  5.         <param-value>contextConfigLocation</param-value>
  6.         <param-value>
  7.             /WEB-INF/applicationContext.xml
  8.             /WEB-INF/spring-servlet.xml
  9.         </param-value>
  10.     </init-param>
  11.     <load-on-startup>1</load-on-startup>
  12. </servlet>
<load-on-startup> 서블릿 컨테이너가 서블릿을 언제 만들고 초기화할지 순서 정함. 보통 1. 


728x90
반응형
반응형
모든 애플리케이션 컨텍스트는 부모 애플리케이션 컨텍스트를 가질수 있다.
단. 애플리케이션 컨텍스트의 검색 순서는 항상 자신 먼저이고 그런 다음 직계 부모 순서이다.
하위 컨텍스트는 검색에서 제외된다.
같은 레벨의 컨텍스트도 갬색에서 제외된다.
동일한 bean 이 부모에게도 있을경우 자식의 bean이 부모의 bean을 오버라이드 한다. 
  1. ApplicationContext parent = new GenericXmlApplicationContext("parents.xml");
  2. GenericApplicationContext child = new GenericApplicationContext(parent);
  3.        
  4. XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(child);
  5. reader.loadBeanDefinitions("child.xml");
  6. child.refresh();
출처 : 토비 스프링3 



728x90
반응형

+ Recent posts