JAVA Bean
https://en.wikipedia.org/wiki/JavaBeans
'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으로 등록되지 않아 컴파일 시에 의존성으로 주입될 수 없습니다.
'IT 이야기 > Java' 카테고리의 다른 글
[JPA] Entity의 N:M 관계를 개발하면서 느낀 것 (0) | 2021.08.10 |
---|---|
springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: JsonObject; (1) | 2021.08.08 |
JPA Default value 적용 - @DynamicInsert (0) | 2021.07.20 |
POJO Class (0) | 2021.06.28 |
[Java Study] 14일차 제네릭(generic) (0) | 2021.02.22 |
댓글