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

+ Recent posts