개발/자바

Java Bean vs Spring Bean

피터JK 2025. 2. 10. 15:01
728x90

Java 개발을 하다 보면 "Bean"이라는 용어를 자주 접하게 됩니다. 특히 Java BeanSpring Bean은 개념적으로 비슷하지만, 중요한 차이점이 있습니다. 이번 글에서는 Java Bean과 Spring Bean의 차이를 설명하고, 각각의 특징과 사용 목적을 정리해 보겠습니다.


1. Java Bean이란?

Java Bean은 자바에서 객체를 재사용하기 위한 규약(Convention)으로 정의된 클래스를 의미합니다. 특정한 규칙을 따르는 클래스는 Java Bean으로 간주되며, 다음과 같은 특징을 가집니다.

Java Bean의 특징

  1. 기본 생성자 제공: 반드시 매개변수가 없는(public) 기본 생성자를 가져야 합니다.
  2. Getter/Setter 메서드 제공: 클래스의 필드는 private으로 선언하고, 외부에서 접근할 수 있도록 getter와 setter 메서드를 제공합니다.
  3. Serializable 인터페이스 구현 (선택 사항): 객체를 직렬화하여 저장하거나 네트워크 전송할 수 있도록 Serializable 인터페이스를 구현할 수 있습니다.

Java Bean 예제

import java.io.Serializable;

public class User implements Serializable {
    private String name;
    private int age;

    // 기본 생성자
    public User() {}

    // Getter and 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;
    }
}

Java Bean은 주로 DTO(Data Transfer Object), VO(Value Object) 등의 형태로 사용됩니다.


2. Spring Bean이란?

Spring Bean은 Spring 프레임워크에서 관리하는 객체를 의미합니다. Spring Container(ApplicationContext)에 의해 생성 및 관리되며, @Component, @Service, @Repository, @Controller 등의 어노테이션을 사용하여 Bean으로 등록할 수 있습니다.

Spring Bean의 특징

  1. Spring Container가 관리: 객체의 생성과 생명 주기를 Spring이 관리합니다.
  2. DI(Dependency Injection) 지원: 다른 Bean을 주입받아 의존성을 쉽게 관리할 수 있습니다.
  3. 싱글턴(Singleton) 기본 설정: 기본적으로 하나의 컨테이너에서 같은 타입의 Bean은 하나만 생성됩니다.
  4. 다양한 설정 방법 제공: @ComponentScan, @Bean 메서드, XML 설정 등을 통해 Bean을 정의할 수 있습니다.

Spring Bean 예제

import org.springframework.stereotype.Component;

@Component  // Spring이 관리하는 Bean으로 등록
public class UserService {
    public String getUserInfo() {
        return "User Info";
    }
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;
    
    @Autowired // 의존성 주입 (DI)
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

Spring Bean은 DI(의존성 주입)를 활용하여 객체 간의 결합도를 낮추고, 애플리케이션의 확장성과 테스트 용이성을 높이는 데 도움을 줍니다.


3. Java Bean vs Spring Bean 비교

구분 Java Bean Spring Bean
관리 주체 개발자가 직접 관리 Spring Container가 관리
생성 방식 new 키워드로 생성 @Component, @Service, @Repository, @Controller, @Bean 사용
의존성 주입 직접 객체 생성 및 주입 Spring이 자동으로 주입 (DI)
기본 라이프사이클 개발자가 직접 관리 Spring이 관리 (생성 ~ 소멸)
기본 스코프 매번 새 객체 생성 싱글턴 (Singleton) 기본
사용 목적 DTO, VO, 일반 객체 서비스, 레포지토리, 컨트롤러 등의 컴포넌트

4. 결론

Java Bean과 Spring Bean은 객체를 관리하는 방식에서 큰 차이가 있습니다. Java Bean은 단순한 객체 모델의 규약이며, 직접 생성하고 사용해야 합니다. 반면, Spring Bean은 Spring 프레임워크가 생성 및 관리하며, DI를 활용하여 더욱 유연한 애플리케이션을 만들 수 있도록 도와줍니다.

언제 Java Bean을 사용하고, 언제 Spring Bean을 사용할까?

  • Java Bean: DTO, VO, 간단한 데이터 저장 객체
  • Spring Bean: 서비스 로직, 레포지토리, 컨트롤러 등의 핵심 애플리케이션 컴포넌트

Spring을 활용하면 객체의 생명 주기를 관리하고, 의존성을 효과적으로 주입할 수 있어 유지보수성과 확장성이 높아집니다. 따라서 일반적인 Java 프로젝트에서는 Java Bean을, Spring 기반 프로젝트에서는 Spring Bean을 활용하는 것이 가장 적절한 선택입니다.


 

728x90