서론
Spring을 공부하다보면 POJO, Java Bean, Spring Bean이라는 용어가 자주 등장한다.
이 세가지는 서로 비슷해 보이지만, 사실은 서로 다른 관점에서 정의된 개념이다.
이 글에서는 이 세 개념을 구조적으로 정리하겠다.
1. POJO란 무엇인가?
POJO는 말 그대로 평범한 자바 객체(Object)다.
- 특정 프레임워크에 의존하지 않는다.
- 특별한 인터페이스를 구현할 필요가 없다.
- 특정 규칙을 반드시 따를 필요도 없다.
public class SuperHeroPojo {
public String firstName;
public String power;
public SuperHeroPojo(String firstName, String power) {
this.firstName = firstName;
this.power = power;
}
public String name() {
return this.firstName;
}
public String getPower() {
return this.power;
}
}
POJO는 자유롭지만, 그 때문에 아래와 같은 문제가 발생한다.
- 프레임워크가 필드를 찾기 어렵다
- 자동 바인딩이 어렵다
- reflection으로 속성을 예측하기 어렵다.
그래서 Java는 Java Bean을 도입했다.
2. Java Bean이란?
Java Bean은 POJO의 한 형태이지만, 엄격한 규칙을 따르는 객체다.
Java 초창기에 GUI 빌더 같은 도구에서 재사용 가능한 컴포넌트를 만들기 위해 정의된 규격이다.
Java Bean의 핵심 규칙은 다음과 같다.
- 모든 필드의 접근 제어자는 private이다.(public getter / setter 제공)
- public 기본 생성자 (no-arg constructor) 존재
- Serializable 구현
public class SuperHeroPojo implements Serializable {
private String firstName;
private String power;
public SuperHeroPojo() {}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getPower() {
return power;
}
public void setPower(String power) {
this.power = power;
}
}
3. Spring Bean이란?
Spring Bean은 구조나 규칙이 아니라, 관리 주체로 정의된다.
Spring IoC 컨테이너가 생성하고 관리하는 객체를 Spring Bean이라고 한다.
@Service
public class UserService {
}
이 객체는 Spring이 생성하고, 의존성을 주입하고, 생명 주기를 관리한다.
여기서 중요한 점은, Spring Bean은 반드시 JavaBean 규칙을 따를 필요가 없다는 것이다.
- 기본 생성자가 없어도 되고
- setter가 없어도 되고
- Serializable이 아니어도 된다.
4. 세 개념의 관계
이 세 개념은 서로 다른 차원에서 정의된다.
- POJO → 객체의 구조적 순수성
- Java Bean → 객체 구현 규칙
- Spring Bean → 객체의 관리 방식
그래서 하나의 객체가 동시에 POJO이면서 Java Bean이면서 Spring Bean 일 수도 있다.
@Component
public class User implements Serializable {
private String email;
public User() {}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
참고 자료
- 스프링과 스프링부트(Spring Boot)ㅣ정의, 특징, 사용 이유, 생성 방법
- Java Bean vs Spring Bean. Deep dive from basic concepts to Spring… | by Iran Macedo | Medium
Powered By. ChatGPT
'Backend' 카테고리의 다른 글
| [Spring] Spring 이해하기(2) - POJO 프로그래밍을 돕는 IoC/DI, AOP, PSA (1) | 2026.02.17 |
|---|---|
| [Backend] Spring Data JPA 환경 내, @Lob + ByteArray 조합으로 인한 bytea / oid 혼동 문제 (1) | 2026.02.12 |
| [Backend] Kotlin JDBC 연결 유형 정리 (0) | 2026.02.02 |
| [Backend] 9주차 내용 정리 (0) | 2026.01.22 |
| [Backend] Kotlin 기반 HTTP 서버 구현 (0) | 2026.01.16 |