250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

[Spring] Pojo란? 본문

스프링Spring

[Spring] Pojo란?

개린이9999 2023. 3. 5. 20:23
728x90

토비-스프링 참조

 

8.3 POJO 프로그래밍

스프링의 가장 강력한 특징과 목표를 기술적으로 정의하자면 아래와 같다.

분리됐지만 반드시 필요한 엔터프라이즈 서비스 기술을 POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드에 제공한다.

해석

(1) : 핵심 로직은 아니지만 반드시 필요한 뒷단의 기술을

(2) : POJO 방식으로 개발된 애플리케이션 핵심 로직에 포함시킨다.

핵심 로직과 뒷단의 기술을 분리하였는데 (2)에 포함시켜 제공하고자 하는게 스프링이 기술적으로 지향하는 목적이라고 한다.

 

그렇다면 POJO가 대체 뭘까? POJO에 대해서 알아보자.

 

 

예시를 들어봅시다.

public class UserDTO {
	
	private String userName;
	private String userId;
	private String userPassword;
	
	public String getUserName() {
		return userName;
	}
	
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	public String getUserId() {
		return userId;
	}
	
	public void setUserId(String userId) {
		this.userId = userId;
	}
	
	public String getUserPassword() {
		return userPassword;
	}
	
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	
}

위 객체는 기본적인 자바 기능인 getter, setter 기능만 가지고 있습니다.

특정 기술에 종속되어 있지 않은 순수 자바 객체이기 때문에 위 객체는 POJO라고 할 수 있습니다.

 

반대의 예시를 들어봅시다.

public class WinExam extends WindowAdapter {

	@Override
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
}

이처럼 Window의 기능을 사용하기 위해 WindowAdapter 클래스를 상속받을 것을 보실 수 있습니다.

이렇게 되면 다른 솔루션을 사용하고자 할 때 많은 양의 코드를 리팩토링해야하는 문제가 있습니다.

 

이처럼 특정 기술과 환경에 종속되어 의존하게 되면, 코드 가독성 뿐만아니라 유지보수, 확장성에도 어려움이 생깁니다.

이러한 객체지향의 장점을 잃어버린 자바를 되살리기 위해 POJO라는 개념이 등장한 것입니다.

 

POJO란 무엇일까?

  • POJO 정의
    • 간단한 자바 오브젝트.
    • 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트.
    •  

 

POJO의 조건

  • 특정 규약에 종속되지 않는다. (필수)
    • (예시) 스트럿츠1 의 경우 ActionForm을 상속해야하는 폼 객체는 거의 비슷한 구조를 가진 DTO를 만들어 복사해줘야한다.
      -> 이미 상속을 받아야하는 규약이 있으므로 자바의 단일 상속 제한 대문에 더 이상 객체지향 설계 기법을 적용하기 어려워진다.
      -> 규약이 적용된 환경에 종속적이 되기 때문에 다른 환경으로 이전이 어렵다.
  • 특정 환경에 종속되지 않는다. (필수)
    • 특정 기업의 프레임워크 안에서만 동작하거나, 특정 서버, 특정 OS 에서만 사용 가능한 코드를 갖고 있는 등 특정 환경에서만 동작할 수 있는 경우라면 POJO라고 할 수 없다.
  • 어노테이션 같은 XML의 설정 정보를 자바코드에 담았다면?
    -> 특정 기술과 환경에 종속적인 정보가 있다면 POJO 성립 X
    -> 단지 코드로 표현하기 적절치 않은 부가정보만 담고 있다면 POJO 성립 O 

  • 객체지향의 원리가 담겨있는 Java 클래스여야 POJO이다.
    • 덩치만 크고 객체지향 설계가 안되어있다면? (상속과 다형성으로 처리할 수 있는 것을 if/else로 가득채우거나 메서드 덩어리가 클 경우 등)
      -> POJO 성립 X
  • 👉🏻 단순히 JavaSE API만 만 사용하거나 자바 문법만 지켰다고 해서 POJO는 아니다.

 

POJO의 장점

  • 코드가 깔끔해진다.
  • 자동화된 테스트에 유리하다.
  • 객체지향적인 설계를 자유롭게 적용할 수 있다.

 

POJO 프레임워크

  • POJO 프로그래밍이 가능하도록 기술적인 기반을 제공하는 프레임워크
  • 대표적 : 스프링 프레임워크, 하이버네이트
728x90