POJO vs JavaBean
2025. 4. 23. 13:51ㆍHigh Level Programming Language/Learning the Java Language
POJO(Plain Old Java Object)와 JavaBean은 모두 "순수한 자바 객체"를 의미하지만, 용도와 규칙, 그리고 프레임워크 친화성 측면에서 차이가 있습니다. 아래에서 두 개념을 명확히 비교해드리겠습니다.
✅ POJO vs JavaBean 비교 정리
구분 | POJO (Plain Old Java Object) | JavaBean |
---|---|---|
정의 | 아무런 제약 없이 작성된 순수 자바 객체 | 특정 명명 규칙을 따르는 자바 객체 |
필수 조건 | 없음 (제약 거의 없음) | 1) public 기본 생성자 2) private 필드 3) getter/setter 메서드 |
생성자 | 어떤 생성자든 가능 | 반드시 기본 생성자(no-arg constructor) 필요 |
접근자 | 필드 접근 방식 자유 | 반드시 getter/setter로 필드 접근 |
접근 제어자 | 필드 public 가능 | 필드는 반드시 private |
상속 제한 | 없음 | 없음 |
Serializable 구현 | 선택 | 선택 (빈 클래스가 데이터를 담는 목적이 강할 경우 자주 사용) |
사용 목적 | 일반적인 도메인 모델, DTO 등 | JSP, JSF, Spring 등의 프레임워크에서 속성 자동 설정 시 사용 |
프레임워크 호환성 | 낮음 (명확한 명명 규칙 없으면 자동 설정 어려움) | 높음 (명명 규칙에 따라 자동 주입 및 바인딩에 유리) |
✅ 예시로 비교
✅ POJO 예시
public class User {
public String name; // public 필드도 허용됨
public int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
- 규칙 없음
- 자유롭게 필드 public access modifier 가능
- 생성자에 제약 없음
✅ JavaBean 예시
public class UserBean implements java.io.Serializable {
private String name;
private int age;
// 디폴트 생성자
public UserBean() {}
// Getter & Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 반드시 private 필드, public getter/setter
- 디폴트 생성자 필수
- 직렬화도 종종 사용
✅ 언제 POJO, 언제 JavaBean?
상황 | 선택 |
---|---|
단순 데이터 모델, 내부 로직, 유연한 설계 필요 | POJO |
Spring, JSP, JSON 바인딩, 데이터 전송 객체 필요 | JavaBean |
✅ 결론 요약
- POJO는 아무 제약 없이 순수한 자바 클래스. 편리하지만 프레임워크에서 자동으로 속성 주입하거나 직렬화하기엔 제약이 있음.
- JavaBean은 특정 규칙(get/set, 기본 생성자 등)을 따라야 하며, Spring이나 JSP 등 프레임워크와의 데이터 바인딩, 속성 자동 주입에 최적화되어 있음.
'High Level Programming Language > Learning the Java Language' 카테고리의 다른 글
equals() 메서드의 5대 계약 원칙 (0) | 2025.04.23 |
---|---|
Object.equals() (0) | 2025.04.23 |
JavaBean의 Property란? (0) | 2025.04.23 |
자바의 오버라이딩과 공변 리턴 타입(Covariant Return Type) 완벽 가이드 (1) | 2025.04.23 |
하위 클래스와 내부 클래스의 private 멤버 접근 이해하기 (0) | 2025.04.23 |