Spring발행일 2024. 6. 27.원본 https://blog.naver.com/jword_/223493088384 ↗

[자바 스프링] Java Bean이란?

[자바 스프링] Java Bean이란? — #자바스프링 #JAVABean #javabean이란? #개발자의도구들 AI스쿨 msa기반 java 백엔드 코스 중에 공...

#Spring#Naver Blog

#자바스프링 #JAVABean #javabean이란? #개발자의도구들

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

\* 현재 웹 서버 프로젝트를 진행중입니다. 전체적인 목차를 보시려면 여기에서 참고하세요

\* 전체코드: https://github.com/keyveloper/HTTP\_server.git

Java Bean이란?

이전글을 통해 POJO를 알아보았습니다. 오늘은 POJO 중에서도 특별한 convention을 따르는 JavaBean에 대해 알아보겠습니다.

​

Bean이란 무엇인가?

Java에서 Bean은 특정 convention을 따르는 클래스들을 의미하는데요. 여기서 convention은 Class에 구현해야할 속성, 메서드 등을 의미합니다. 예를들어 JavaBean의 경우에는 "getter와 setter 메서드가 구현되어야 한다"와 같은것 들입니다.

​

그렇다면 Java Bean은 어떤 convention을 만족해야할까요?

​

JavaBean's convention!

JavaBean은 기본적으로 POJO의 한 종류입니다. 하지만, 자유로운 POJO와 다르게, JAVA Bean은 자유롭지 못한 몇가지 제약사항이 존재합니다.

​

  1. Serializable interface를 구현해야한다.
  2. Fields는 반드시 Private로 선언해야 한다.
  3. Fields는 반드시 getter, setter 메서드로 접근, 수정이 가능해야한다.
  4. no-arg Constructor가 반드시 객체 안에 존재해야 한다.
  5. Fields는 반드시 Constuctor나 getter, setter로만 접근이 가능해야 한다.
🤜🏻 Serializable? 해당 객체가 바이트 스트림으로 변환 될 수 있다는 것을 의미한다.

\* 추가내용 : 위의 1번과 4번의 경우 enterprise java Bean에서는 필수이지만, 없다고 해서 일반 Java Bean이 아닌건 아닙니다.

​

특히 1번의 경우 치명적인 단점으로 현실에서는 빼고 씁니다. 4번의 경우는 선택적으로 사용하면 됩니다.

POJO와 비교하기

POJO vs Java Bean

POJOJava Bean
It doesn’t have special restrictions other than those forced by Java language.It is a special POJO which have some restrictions.
It doesn’t provide much control on members.It provides complete control on members.
It can implement Serializable interface.It should implement serializable interface.
Fields can be accessed by their names.Fields are accessed only by getters and setters.
Fields can have any visibility.Fields have only private visibility.
There may/may-not be a no-arg constructor.It must have a no-arg constructor.
It is used when you don’t want to give restriction on your members and give user complete access of your entityIt is used when you want to provide user your entity but only some part of your entity.

출처: https://www.geeksforgeeks.org/pojo-vs-java-beans/

예시 코드

import lombok.Data;​import java.time.LocalDate;​@Datapublic class EmployeeBean { private static final long serialVersionUID = -34193891341L; private String firstName; private String lastName; private LocalDate startDate;​ public EmployeeBean() {}​ public EmployeeBean(String firstName, String lastName, LocalDate startDate) { this.firstName = firstName; this.lastName = lastName; this.startDate = startDate; ​ public String getFirstName() { return firstName; }​ public void setFirstName(String firstName) { this.firstName = firstName; } // additional getters/setters}​

왜 사용하는가?

Java Bean은 특정 convention을 만족합니다. 이는 표준화된 소프트웨어 설계를 의미하며, 해당 표준을 만족하는 여러 프로젝트에서 재사용, 이식이 가능합니다. 즉, 해당 표준을 따랐을 때 얻을 수 있는 호환성, 통합성, 가독성, 유연성 등의 이점을 누릴 수 있습니다.

단점?

JavaBean은 Fields의 setter와 getter를 통해 쉽게 수정 및 접근이 가능합니다. 이는 객체의 가변성을 높여, 다중 스레드 환경에서 데이터의 일관성 문제를 야기할 수 있습니다.

​

또한, Lombok이 없다는 가정하에, 수 많은 setter와 getter메서드를 생성해야하기 때문에 반복적인 코드를 계속 작성해야합니다. (Boilerplate Code problem)

​

또한 zero-argument Constuctor의 필요성으로 인해, 객체를 사용할 때 해당 객체가 유효한지를 확실하게 체크해줘야 하는 이슈또한 존재합니다.