- POJO(Plain Old Java Object)
- POJO의 의미를 이해할 수 있다.
POJO는 Spring에서 사용하는 핵심 개념들에 둘러 싸여져 있는 모습이다. 이는 POJO라는 것을 IoC/DI , AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다
POJO는 Plain Old Java Object라는 단어의 첫글자를 따서 만든 약자로써 Java로 생성하는 순수한 객체를 의미한다.
POJO 프로그래밍이란?
POJO 프로그래밍이란 POJO를 이용해서 프로그래밍 코드를 작성하는 것을 의미한다. 그런데 단순히 순수 자바 객체만을 사용해서 프로그래밍 코드를 작성한다고 해서 POJO 프로그래밍이라고 볼 수는 없다
POJO프로그래밍으로 작성한 코드라고 불리우기 위해서는 크게 두가지 정도의 기본적인 규칙을 지켜주어야한다
1.자바나 자바의 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽메이지 않아야한다
public class User {
private String userName;
private String id;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
위 코드는 자바에서 제공하는 기능만 사용하여 getter,setter만 가지고 있는 코드이다 해당 클래스의 코드에서는 자바 언어 이외에 특정한 기술에 종속되어 있지 않은 순수한 객체이기 때문에 POJO라고 부를 수 있다.
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. 특정환경에 종속적이지 않아야 한다.
서블릿 기반의 웹 애플리케이션을 실행 시키는 서블릿 컨테이너 인 아파치 톰캣을 예로 들면 순수 자바로 작성한 애플리케이션 코드 내에서 톰캣이 지원하는 API를 직접 가져다가 사용한다고 가정해보면
"톰캣 대신에 제티를 쓰세요!"
그런데 만약 시스템의 요구사항이 변경되어 톰캣 말고 제티라는 다른 서블릿 컨테이너를 사용하게 된다면 애플리케이션 코드에서 사용하고 있는 톰캣 API 코드들을 모두 걷어내고 제티로 수정하든가 최악의 경우에는 애플리케이션을 전부 뜯어 고쳐야될지도 모르는 상황에 직면하게 될 수도있다.
- POJO가 필요한 이유를 알 수 있다.
POJO프로그래밍이 필요한 이유
- 특정 환경이나 기술에 종속적이지 않으면 재사용 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다.
- 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거 함으로써 코드가 깔끔해진다
- 코드가 깔끔해지기 때문에 디버깅하기도 상대적으로 쉽다.
- 특정 기술이나 환경에 종속적이지 않기 때문에 테스트 역시 단순해진다.
- 객체지향적인 설계를 제한없이 적용할 수 있다.(가장중요)
POJO 프로그래밍이 필요한 이유를 생각하다보면 자연스럽게 객체지향적인 사고에 대한 고민을 하게되고, 이러한 사고를 통해서 Spring을 좀 더 객체지향적으로 사용할수 있을거라 생각한다.
POJO와 Spring의 관계
Spring은 POJO 프로그래밍을 지향하는 Framework이다
그리고 최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해서 Spring에서는 세가지 기술을 지원하고있다 (IoC/DI , AOP, PSA)
Point
POJO란 순수한 자바 객체를 의미한다
POJO 프로그래밍이란 순수 자바 객체가 다른 기술이나 호나경에 종속되지 않도록 하기 위한 프로그래밍 기법이다
POJO 프로그래밍을 효과적으로 적용학 ㅣ위해서는 특정 기술에 대한 지식보다는 JDK의 API에 대한 지식과 객체지향적인 사고방식과 설계를 위한 훈련이 우선시 되어야 한다.
Spring Framework은 POJO프로그래밍을 지향하기 위해 IoC/DI , AOP, PSA는 기술을 제공한다.
Level Up
- 객체 지향 설계 원칙
- SOLID(객체 지향 설계 원칙): https://ko.wikipedia.org/wiki/SOLID(객체지향_설계)
- SOLID 요약: https://itvillage.tistory.com/entry/객체지향-설계-원칙-SOLID-원칙
'TIL' 카테고리의 다른 글
[SpringFramework][AOP] (0) | 2022.10.15 |
---|---|
[SpringFramework][IoC/DI기초] (0) | 2022.10.15 |
[Spring Framework][사용하는 이유] (0) | 2022.10.14 |
[Spring][DI] (0) | 2022.10.13 |
[데이터베이스와 SQL][SQL문정리] (0) | 2022.10.10 |