1. POJO(Plain Old Java Object)
- POJO는 IoC/DI, AOP, PSA를 통해서 달성할 수 있다
- Plain은 사전적 의미로 '있는 그대로'이며, Java로 생성하는 순수한 객체를 의미한다
- 객체지향의 원리에 충실하게 설계된 오브젝트이다
2. POJO 프로그래밍
- POJO를 이용해서 프로그래밍 코드를 작성하는 것을 의미한다
- Spring은 POJO 프로그래밍을 지향하는 Framework이다
- Spring은 최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드 작성을 위해 세가지 기술(IoC/DI , AOP , PSA)을 지원한다
- POJO는 몇 가지 기본 규칙을 가지고 있다
1) 특정 규약에 종속되지 않는다
- Java 또는 Java spec에 정의되지 않은 기술이나 규약에 간섭받지 않는다
- Java 언어 외에 필요하지 않은 API에 종속되지 않는다
ex) EJB Architecture에서는 특정 클래스를 상속받아야 하는 규약이 있다
- Java의 단일 상속 제한 원칙으로 인하여 해당 클래스에 더 이상의 상속이 불가능하다
- 결과적으로 추가적인 객체지향적 설계를 적용할 수 없데 된다
- 아래 코드에서 특정 클래스인 ActionForm 과 Action을 상속받고 있다
→ 상속 목적은 Status라는 기술을 사용하기 위해서이다
→ 향후 애플리케이션의 목적이나 요구사항이 변경될 경우 Status 기술을 사용하기 위해 상속받은 클래스를 전부
변경하여야 하는 어려움이 발생한다
public class MessageForm extends ActionForm{
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
public class MessageAction extends Action{
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");
}
}
2) 특정 환경에 종속되지 않는다
- 특정한 프레임워크에서만 동작하면 안된다
- 웹 기반의 환경정보나 웹 기술을 담고있는 클래스, 인터페이스를 사용하면 안된다
→ 웹 컨트롤러와 연결되어 사용할 경우라도 웹을 직접적으로 사용환경으로 제한하면 안된다
→ ex) HTTPServletRequest, HTTPServletResponse 등...
3) 객체지향 원리를 따라야 한다
- Java로 구현되었어도 객체지향적 설계가 적용되었다고 볼 수 없는 경우가 있다
- 책임과 역활이 분명하게 구분되어야 한다 (단일책임의 원칙)
→ 하나의 클래스는 하나의 책임 또는 역활만 존재해야 한다
→ 상속, 다형성을 활용해서 설계할 수 있다
→ 조건문만을 활용하여 설계된 오브젝트는 POJO라고 할 수 없다
※ 참조 링크
▶ 객체지향 설계
https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)
SOLID (객체 지향 설계) - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
'Spring Framework' 카테고리의 다른 글
Spring Framework - AOP (0) | 2022.06.22 |
---|---|
Spring Framework - DI - Spring Container (0) | 2022.06.19 |
Spring Framework - IoC / DI - 기초 (0) | 2022.06.17 |
Spring Framework - 정의 (0) | 2022.06.15 |
Spring Framework - 환경 구성 (0) | 2022.06.14 |