1. Java나 Java의 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.
public class MessageForm extends ActionForm{ // (1)
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
public class MessageAction extends Action{ // (2)
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
MessageForm messageForm = (MessageForm) form;
messageForm .setMessage("Hello World");
return mapping.findForward("success");
}
}
ActionForm 클래스는 과거에 Struts라는 웹 프레임워크에서 지원하는 클래스
(1)에서는 Struts라는 기술을 사용하기 위해서 ActionForm을 상속하고 있다.
(2)에서는 Struts 기술의 Action 클래스를 상속 받고 있다.
이렇게 특정 기술을 상속해서 코드를 작성하게 되면 나중에 애플리케이션의 요구사항이 변경되서 다른 기술로 변경하려면 Struts의 클래스를 명시적으로 사용했던 부분을 전부 다 일일이 제거하거나 수정해야 한다.
Java는 다중 상속을 지원하지 않기 때문에 extends
키워드를 사용해서 한 번 상속을 하게되면 상위 클래스를 상속받아서 하위 클래스를 확장하는 객체지향 설계 기법을 적용하기 어려워지게 된다.
2. 특정 환경에 종속적이지 않아야 한다.
서블릿(Servlet) 기반의 웹 애플리케이션을 실행 시키는 서블릿 컨테이너(Servlet Container)인 아파치 톰캣(Apache Tomcat)을 예로
순수 Java로 작성한 애플리케이션 코드내에서 Tomcat이 지원하는 API를 직접 가져다가 사용한다는 가정
Tomcat 대신에 Zetty를 사용하라는 요청
시스템의 요구 사항이 변경되어서 Tomcat
말고 제티(Zetty
)라는 다른 Servlet Container
를 사용하게 된다면!?
애플리케이션 코드에서 사용하고 있는 Tomcat API 코드를 Zetty로 수정하거나 애플리케이션 전체를 고쳐야 할 상황이 발생
POJO 프로그래밍이 필요한 이유는
Spring은 POJO 프로그래밍을 지향하는 Framework
최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해서 Spring에서는 세가지 기술을 지원하고 있다.
IoC/DI, AOP, PSA
POJO에 대한 개념을 학습하면서 한가지 알아야 두어할 것
애플리케이션 프로그래밍 코드를 작성할 때 항상 내가 작성한 코드가 객체지향스러운가에 대한 고민을 하는 습관을 가지는 것