POJO(Plain Old Java Object)란?
: PO - 순수한 객체를 의미
: JO - 객체지향 프로그래밍
: Java로 생성하는 순수한 객체를 말하며 POJO를 이용해서 프로그래밍 코드를 작성하는 것을 의미
: 객체지향의 원리에 충실하며 다른 환경과 기술에 종속되지 않고, 필요에 따라서 재활용이 가능한 자바 오브젝트
규칙
1. Java나 Java 스텍에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 함
: 자바 언어외 꼭 필요한 API 외에는 종속되지 않음
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만 가지고 있기에 java 언어 이외의 특정 기술에 종속되어 있지 않은 순수한 객체이기 때문에 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");
}
}
: (1) Struts 사용을 위한 ActionForm을 상속 / (2) Action 상속을 받고 있으므로 extends 키워드를 사용하여 상속을 할 경우 java는 다중 상속 허용을 하지 않기 때문에 상위클래스를 상속받아서 하위 클래스를 확장하는 객체지향 설계 기법 적용이 어려워짐
2. 특정 환경에 종속적이지 않아야 함
: 특정 프레임워크에서만 동작하면 안되며, 웹 기반 환경정보나 웹 기술을 담고있는 클래스 또는 인터페이스를 사용하면 안됨 (즉, 웹에서만 동작하는 API를 사용하면 안된다는 의미)
위의 상속 예시와 같이 특정 환경에 종속할 경우 애플리케이션 코드에서 사용하는 모든 것을 수정해야 하는 상황에 놓일 수도 있음
3. 객체 지향원리를 따라야 함
: 하나의 클래스 내에서 책임과 역할이 분명히 나뉘어야 함(SPT 단일 책임 원칙)
- 상속이나 다형성을 활용하여 구현이 가능함
- 조건문만을 활용한 설계 오브젝트는 POJO가 아님
[POJO 프로그래밍 필요 이유]
1) 특정 환경이나 기술에 종속적이지 않으면 재사용 가능하고, 확장 가능한 유연한 코드를 작성할 수 있음
2) 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔해짐
3) 코드가 갈끔할 경우 디버깅하기도 상대적으로 쉬움
4) 특정 기술이나 환경에 종속적이지 않기 때문에 테스트가 단순해짐
5) 객체지향적인 설계를 제한없이 적용할 수 있음
[Spring과의 관계]
: Spring은 POJO 프로그래밍을 지향하는 Framework이므로, 애플리케이션 프로그래밍 코드를 작성할 때 항상 내가 작성한 코드가 객체지향스러운가에 대한 고민하는 습관이 필요함
'공부 자료 > Spring' 카테고리의 다른 글
[Spring Core] DI (Dependency Injection) (0) | 2022.10.11 |
---|---|
[Spring Core] PSA (Portable Service Abstraction) (0) | 2022.10.11 |
[Spring Core] Spring Framework 소개 (0) | 2022.10.11 |
[Spring Core] Framework & Library (0) | 2022.10.11 |
[Spring Core] IoC (Inversion of Control) (0) | 2022.10.10 |