본문 바로가기
IT 이야기/Java

[Bean] JAVA vs Spring

by Dblog 2021. 7. 27.
728x90

JAVA Bean

https://en.wikipedia.org/wiki/JavaBeans

 

JavaBeans - Wikipedia

In computing based on the Java Platform, JavaBeans are classes that encapsulate many objects into a single object (the bean). They are serializable, have a zero-argument constructor, and allow access to properties using getter and setter methods. The name

en.wikipedia.org

 

'Java Bean은 java로 작성된 컴포넌트'라고 정의되어 있습니다. 또 조작이 가능하고 재사용이 가능한 소프트웨어 컴포넌트이다. 라 정의되어 있습니다. 

처음 보자마자 무슨 소리인지 하나도 이해가 되지 않았습니다. 그냥 class와 다른 게 뭘까, 혹은 java 객체와 다른 게 뭔가 이해가 잘 가지 않았습니다.

공부를 하다 보니 java bean은 그저 어떠한 형태, 규격을 따르는 java class라고 할 수 있을 것 같습니다. 

 

규격에는 크게 4가지로 분류될 수 있습니다.

  • 클래스는 직렬화되어야 한다.
  • 클래스는 기본 생성자를 가지고 있어야 한다.
  • 클래스는 get/set을 통해 접근할 수 있어야 한다. (매개변수는 private로 선언되어 있어야 합니다.)
  • 클래스는 필요한 이벤트 처리 메서드를 포함하고 있어야 한다. 

 

예제를 확인해 보겠습니다.

public class UserEntity {

    private Long        id;
    private String      email;
    private String      password;
    
    // 기본 생성자는 컴파일할때 자동으로 생성되기 때문에 추가로 생성하지 않아도 되긴합니다.
    public UserEntity() {    
    }
    
    public Long getId() {
        return id;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

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

    public void setEmail(String email) {
        this.email = email;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 

근데 어디서 많이 보던 코드입니다. 이 코드에 @Entity, @Id 어노테이션을 적절히 추가하면 어떻게 될까요.?

@Entity
public class UserEntity {

    @Id@GeneratedValue
    private Long        id;
    private String      email;
    private String      password;
    
    // 기본 생성자는 컴파일할때 자동으로 생성되기 때문에 추가로 생성하지 않아도 되긴합니다.
    public UserEntity() {    
    }
    
    public Long getId() {
        return id;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

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

    public void setEmail(String email) {
        this.email = email;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 

JPA 설정할 때 익숙하게 볼 수 있는 'Spring bean'이 됩니다.

Spring Bean은 전체적으로 Java Bean과 유사합니다. 다만 Spring Ioc Container가 관리하는 객체, 즉 스프링 프레임워크에서 관리하는 java class로 생각할 수 있으며 때에 따라서는 POJO(Plain Old Java Object)를 Spring Bean으로 볼 수 있습니다. 

Spring Ioc Container에서 관리하는 객체라는 뜻은 객체 생성/조립, 생명주기 수행, 의존성 주입에 해당하는 행위를 하는 객체임을 의미하게 됩니다.

Spring Bean을 프레임워크에 등록하기 위해서 어노테이션을 사용하게 되는데 

@Component, @Controller, @Service, @Entity... 어노테이션을 포함해서 등록하게 됩니다. 어노테이션이 제외된 클래스의 경우 Spring Bean으로 등록되지 않아 컴파일 시에 의존성으로 주입될 수 없습니다.

728x90

댓글