특정 기술과 환경에 종속된 자바 코드는 가독성이 떨어져서 유지보수가 어렵고, 확장성이 떨어지는, 객체지향성의 방향을 잃는 문제가 발생
POJO : Plain Old Java Object
순수 오래된 자바 객체만 이용하여 프로그래밍 코드를 작성하는 것
객체지향적인 원리를 지향하면서, 기술과 환경에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트
꼭 필요한 ⑴API 외에 사용하지 않는다.
특정 Library, Module에서 정의된 클래스를 상속받아 구현하지 않는다.
<POJO 방식이 아닌 예>
public class ExampleListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}
catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
}
▷ JMS(Java Message Service) API 를 사용하기 위해서 MessageListner
인터페이스를 상속받아야 한다.
이렇게 구현하면 JMS 환경에 종속된다.
만약 Listener가 많아지게 되고 다른 솔루션으로 교체할 경우 큰 변경 비용이
발생한다.
<POJO 방식>
@Component
public class ExampleListener {
@JmsListener(destination = "myDestination")
public void processOrder(String message) {
System.out.println(message);
}
}
▷ 'JMS'에서 'RabbitMQ'로 메시징 솔루션을 변경한다고 했을때,
개발자는 '@JmsListener' 어노테이션을 '@RabbitListener' 어노테이션으로 교체
하기만 하면 된다.
예를 들어, 웹기술의 클래스나 인터페이스를 상속받거나 구현하면 해당 객체는 웹화면에서만 사용이 가능하다.
<POJO 방식이 아닌 예>
public class NotPojo extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
}
}
▷ 사용환경이 웹 환경에 종속되는 HttpServletRequest나 HttpSession와 관련된 API를 직접 이용해서는 안된다.
웹 이외의 클라이언트가 요청할 수 없어 호환성이 떨어질 수 있기 때문이다.
<POJO 방식>
public class PojoStyle{
private Long length;
private String name;
public Long getLength(){
return length;
}
public String getName(){
return name;
}
public void setLength(int length){
this.length = length;
}
public void setName(String name){
this.name = name;
}
}
⑵Spring은 POJO 프로그래밍을 지향하는 ⑶프레임워크이다.
최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해 Spring 프레임워크에서는 IoC/DI, AOP, PSA를 지원하고 있다.
⑴ API : 프로그램을 개발하기 위해 기본적으로 제공하는 클래스와 인터페이스 위주의 코드들, JAVA API는 JDK 내에 존재
⑵ Spring : JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀
JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용한다.
⑶ 프레임워크 : 자주 쓰일만한 기능들을 모아놓은 모임(집합)
기본적인 설계나 필요한 라이브러리를 제공
https://onpups.pe.kr/386
http://asuraiv.blogspot.com/2017/07/spring-pojo.html
https://code-lab1.tistory.com/314
https://beststar-1.tistory.com/32
잘 봤습니다. 좋은 글 감사합니다.