JavaBean과 POJO의 차이점은 무엇입니까?


210

차이가 확실하지 않습니다. 저는 Hibernate를 사용하고 있으며 일부 책에서는 JavaBean과 POJO를 상호 교환 가능한 용어로 사용합니다. Hibernate 컨텍스트뿐만 아니라 일반적인 개념으로 차이가 있는지 알고 싶습니다.

답변:


252

JavaBean은 특정 규칙을 따릅니다. getter / setter 네이밍, 퍼블릭 기본 생성자, 직렬화 가능 등. 자세한 내용은 JavaBeans Conventions 를 참조하십시오.

POJO (plain-old-Java-object)는 엄격하게 정의되지 않았습니다. 특정 인터페이스를 구현하거나 특정 기본 클래스에서 파생하거나 특정 프레임 워크와 호환되도록 특정 주석을 사용하지 않아도되는 임의의 (종종 비교적 단순 할 수 있음) Java 객체입니다. 자바 객체.


41
JavaBean은 POJO 일 수 있으며 일반적으로 많은 POJO는 실제로 JavaBean입니다.
Joachim Sauer

8
아니요, POJO의 정의에 따르면 Java Bean은 Java Bean 으로 간주되기 때문에 클래스가 특정 코딩 규칙을 따라야하기 때문에 POJO 가 아닙니다 (예 : 인수가없는 생성자가 있거나 단어 "get"및 / 또는 시작하는 메소드가 있어야 함). "set") 또는 BeanInfo 클래스와 함께 배포됩니다.
Nat

15
이들이기 때문에 규칙은 , 당신이 성공적으로 bean가 POJO 될 수 있음을 주장 할 수 있다고 생각합니다 (예를 들어 당신이 자바 빈즈 인터페이스 또는 유사한에서 상속하지 않는)
브라이언 애그뉴

1
JavaBeans 스펙은 "재사용 가능한 소프트웨어 구성 요소"(또는 일부)로서 매우 느슨하지 않은 JavaBean을 정의하지 못합니다. 인수없는 생성자를 가질 필요가없고, "get"또는 "set"으로 시작하는 메소드가 필요하지 않으며, 직렬화 할 필요가 없으며 클래스 일 필요도 없습니다.
Tom Hawtin-tackline

4
수학적으로, 우리는 자바 빈즈가 POJO의 서브셋을 형성한다고 말할 수있다. 왜냐하면 POJO에 대한 특정 제약은 자바빈을 만들기 때문이다.
Nishit

106

모든 JavaBean이 POJO이지만 모든 POJO가 JavaBean 인 것은 아닙니다.

JavaBean은 특정 프로그래밍 규칙을 만족시키는 Java 객체입니다.

  • JavaBean 클래스는 Serializable 또는 Externalizable을 구현해야합니다.
  • JavaBean 클래스에는 인수없는 공개 생성자가 있어야합니다.
  • 모든 JavaBean 특성에는 공용 setter 및 getter 메소드가 있어야합니다 (적절한 경우).
  • 모든 JavaBean 인스턴스 변수는 개인용이어야합니다.

1
POJO가 구현할 수 없다고 생각했습니다 Serializable.
naXa

10
"JavaBean 클래스에는 인수가없는 생성자가 있어야합니다." 또한 여기 에 공개
radistao

JavaBean은 직렬화 가능하므로 JavaBean이 POJO가 아닙니다.
karlihnos 2016 년

25

Martin Fowler에 따르면 POJO는 Business Logic을 캡슐화하는 객체이며 Bean (다른 답변에 이미 정의 된 정의 제외)은 데이터를 보관하기위한 컨테이너에 지나지 않으며 객체에서 사용할 수있는 작업은 단순히 설정하고 데이터를 가져옵니다.

이 용어는 Rebecca Parsons, Josh MacKenzie와 2000 년 9 월 회의에서 연설을 준비하는 동안 만들어졌습니다.이 연설에서 우리는 비즈니스 로직을 Entity Bean을 사용하는 대신 일반 Java 객체로 인코딩 할 때 얻을 수있는 많은 이점을 지적했습니다. 우리는 왜 사람들이 시스템에서 일반 객체를 사용하는 것에 반대하는지 궁금해했으며 단순한 객체에는 멋진 이름이 없기 때문이라고 결론 내 렸습니다. 그래서 우리는 그들에게 하나를 주었다. 그리고 그것은 매우 멋지게 붙 잡혔다.

http://www.martinfowler.com/bliki/POJO.html


7

POJO : 다른 외부 써드 파티 라이브러리를 지원하지 않고 기본 JDK로 클래스를 실행할 수있는 경우 호출 된 POJO

JavaBean : 클래스에 접근 자 (세터 및 게터)가있는 속성 만 포함 된 경우이를 javabeans라고합니다. Java Bean에는 일반적으로 일부 데이터를 보유하는 데 사용되는 비즈니스 로직이 포함되지 않습니다.

모든 Javabeans는 POJO이지만 모든 POJO는 Javabeans가 아닙니다.


7

Pojo-일반 Java 오브젝트

pojo 클래스는 기술 / 프레임 워크와 완전히 느슨하게 결합 된 특수 클래스가없는 일반 클래스입니다. 클래스는 기술 / 프레임 워크에서 구현하지 않으며 클래스가 pojo 클래스라고하는 기술 / 프레임 워크 API에서 확장되지 않습니다.

pojo 클래스는 인터페이스를 구현하고 클래스를 확장 할 수 있지만 수퍼 클래스 또는 인터페이스는 기술 / 프레임 워크가되어서는 안됩니다.

예 :

1.

class ABC{
----
}

ABC 클래스는 기술 / 프레임 워크를 구현하거나 확장하지 않았으므로 이것이 pojo 클래스입니다.

2.

class ABC extends HttpServlet{
---
}

서블릿 기술 API에서 확장 된 ABC 클래스는 이것이 pojo 클래스가 아닌 이유입니다.

삼.

class ABC implements java.rmi.Remote{
----
}

ABC 클래스는 rmi api에서 구현되므로 이것이 pojo 클래스가 아닙니다.

4.

class ABC implements java.io.Serializable{
---
}

이 인터페이스는 기술 / 프레임 워크의 일부가 아닌 Java 언어의 일부이므로 포조 클래스입니다.

5.

class ABC extends Thread{
--
}

여기서 thread는 Java 언어의 클래스이므로 pojo 클래스이기도합니다.

6.

class ABC extends Test{
--
}

Test 클래스가 기술 / 프레임 워크에서 확장되거나 구현되는 경우 ABC는 Test 클래스의 속성을 상속하므로 pojo 클래스가 아닙니다. Test 클래스가 pojo 클래스가 아닌 경우 ABC 클래스도 pojo 클래스가 아닙니다.

7.

지금이 시점은 예외적 인 경우입니다

@Entity
class ABC{
--
}

@Entity최대 절전 모드 api 또는 jpa api에서 제공하는 주석이지만 여전히이 클래스를 pojo 클래스로 호출 할 수 있습니다. 이 예외적 인 경우 기술 / 프레임 워크에서 제공되는 주석이있는 클래스를 포조 클래스라고합니다.



1

POJOS특정 규칙 (getter / setter, public no-arg 생성자, 개인 변수)을 사용하고 작동합니다 (예 : 형식별로 데이터를 읽는 데 사용) JAVABEANS.


1

요약하면 유사점과 차이점은 다음과 같습니다.

   java beans:                          Pojo:
-must extends serializable              -no need to extends or implement.
 or externalizable.                     
-must have public class .               - must have public class
-must have private instance variables.      -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor.           - can have constructor with agruments.

모든 JAVA Bean은 POJO이지만 모든 POJO가 JAVA Bean은 아닙니다.


0

위의 공식적인 정의를 보았습니다.

그러나 정의에 너무 매달리지 마십시오. 여기서 사물 의 의미 를 더 자세히 살펴 봅시다 .

JavaBeans는 사용자가 네트워크를 통해 서버 (웹 또는 개인 네트워크를 통해)에서 원격으로 데이터 및 / 또는 응용 프로그램 코드에 자주 액세스하는 Enterprise Java 응용 프로그램에서 사용됩니다. 따라서 관련된 데이터는 직렬 형식으로 사용자 컴퓨터 내부 또는 외부로 스트리밍되어야하므로 Java EE 객체가 Serializable 인터페이스를 구현해야합니다. JavaBean의 이러한 특성은 파일 시스템에서 데이터를 읽거나 파일 시스템에 기록하는 Java SE 응용 프로그램 객체와 다르지 않습니다. 다양한 사용자 시스템 / OS 조합의 네트워크를 통해 Java 클래스를 안정적으로 사용하려면 처리 규칙이 채택되어야합니다. 따라서 개인 속성, 인수가없는 생성자 및 표준화 된 getter 및 setter를 사용하여 이러한 클래스를 공용으로 구현해야합니다.

Java EE 애플리케이션은 JavaBeans로 구현 된 클래스 이외의 클래스도 사용합니다. 이들은 입력 데이터를 처리하거나 출력 데이터를 구성하는 데 사용될 수 있지만 네트워크를 통해 전송 된 객체에는 사용되지 않습니다. 따라서 Java 오브젝트로 유효하다는 위의 고려 사항을 적용 할 필요는 없습니다. 후자의 클래스를 POJO-Plain Old Java Objects라고합니다.

대체로, Java Beans는 네트워크를 통해 사용하기에 적합한 Java 객체로 볼 수 있습니다.

1995 년 이후 소프트웨어 업계에는 엄청난 과대 광고가 있고 소량의 허벅지가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.