java - POJO vs Java Bean

들어가기

Java 개발을 하다보면, 누구나 자동으로 접할수 밖에 없는 단어라면 아마도 POJO, Bean 이라는 것이 있다. 대충 보면 이 둘의 의미가 비슷한거 같기도하고, 아닌거 같기도 하다. 이번에 그 차이를 한번 정리해 본다.

POJO란

POJO란 Plain Old Java Object의 약자로,말 그대로 평범하고 오래된 Java Object라는 의미로, 순수한 Java Object를 의미한다. 2000년 9월 세미나에서 마틴파울러옹이 J2EE를 까면서 내세운 단어이다. 과거 EJB, Strust같은 프레임워크는 비지니스 로직을 구현하기 위한 클래스를 코딩할 때 프레임워크의 특정 인터페이스등의 상속을 강요하였고, 그 결과 비지니스 로직을 코딩해야할 시간에 상속을 구현하기 위한 관용적인 코딩작업을 불필요하게 해야 했었다. 이렇게 프레임워크가 비지니스 로직에 특정 프레임워크의 기술에 관련된 코딩을 강제하는 것을, 침투적인 프레임워크라 하는데 무의미하고 관용적인 코딩의 반복외에도 이식성등 여러가지 문제를 가지고 있다.

객체지향의 가장 중요한 개념중 하나의 느슨한 의존관계를 역행하는 이런 침투적인 프레임워크의 문제점을 강조하기 위해 마틴파울러옹은 POJO라는 말을 만들었고 이 POJO라는 말은 Java 진영외에도 다양한 프로그래밍 진영에서 사용하게 되었다.

POJO른 조금 구체적으로 설명하자면, 특정 기술에 종속되지 않은 순수한 JAVA Object라고 말할 수 있겠다.

JAVA Bean 이란

Java bean? Java 콩? 이게 무슨 말일까? Java Bean은 데이터를 표현하기 위한 Java 클래스를 만들때의 규약이다.

아래 규칙을 지킨 Java 클래스는 Java bean이라고 부른다.

  • 모든 클래스의 프로퍼티는 private이며 getter, setter 메소드로 제어한다.
  • 인자가 없는 public 생성자가 있어야 한다.
  • Serializable 인터페이스를 구현해야 한다.

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
package hanumoka.portfolio.nao.domain;

import java.io.Serializable;

public class AccountVO implements Serializable {

private static final long serailVersionUID = 1;
private String id;
private String name;

public AccountVO(){
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Java bean 규약은 Java EE 프레임워크에서 데이터를 저장할 Java 클래스를 만들때 제안하는 일종의 규약이다. Java bean 규약은 jdk1.1부터 시작되었으며, Java 진영의 다양한 시스템에서 Java 클래스로 데이터를 공유를 위한 표준으로 사용되고 있다.

POJO와 JAVA BEAN은 같다?

Java bean은 POJO이다. 그리나 POJO는 Java bena이 아니다.

POJO는 java bean 보다 범주가 더 넓은 개념이다.

참고자료

https://searchmicroservices.techtarget.com/answer/What-is-a-Java-Bean-Why-it-is-useful-in-J2EE http://www.avajava.com/tutorials/lessons/what-is-a-javabean.html https://stackoverflow.com/questions/3295496/what-is-a-javabean-exactly https://stackoverflow.com/questions/12517905/what-is-java-pojo-class-java-bean-normal-class