자바빈즈

자바빈즈()는 자바로 작성된 소프트웨어 컴포넌트이다.

자바빈즈의 사양은 썬 마이크로시스템즈에서 다음과 같이 정의되었다. "빌더 형식의 개발도구에서 가시적으로 조작이 가능하고 또한 재사용이 가능한 소프트웨어 컴포넌트이다."

많은 측면에서 유사성을 보임에도 불구하고 자바빈즈는 엔터프라이즈 자바빈즈(EJB)와 혼동하지 말아야 한다. EJB는 자바 플랫폼, 엔터프라이즈 에디션(Java EE)의 일부로서 서버 계열의 컴포넌트이다.

자바빈즈의 관례 
자바빈즈 클래스로서 작동하기 위해서, 객체 클래스는 명명법, 생성법 그리고 행동에 관련된 일련의 관례를 따라야만 한다. 이러한 관례는 (빌더 형식의) 개발 도구에서 자바빈즈와의 연결을 통해 클래스의 사용과 재사용 그리고 클래스의 재배치를 가능하게 한다.

지켜야 할 관례에는 다음과 같은 것이 있다.

 클래스는 직렬화되어야 한다.(클래스의 상태를 지속적으로 저장 혹은 복원시키기 위해)
 클래스는 기본 생성자를 가지고 있어야 한다.
 클래스의 속성들은 get, set 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다.
 클래스는 필요한 이벤트 처리 메서드들을 포함하고 있어야 한다.

오히려 인터페이스의 구현보다 다양한 관례로서 표현된 요구 사항들로 인해 일부 개발자들은 자바빈즈를 확실한 명명법을 따르는 예전의 자바 객체로 보는 편이다. 그렇지만 그러한 관점은 이벤트 처리를 지원하는 자바빈즈에 대한 오해를 낳을 수도 있다. 왜냐하면 메서드 관례와 이벤트 처리를 지원하는 클래스는 상당히 복잡하기 때문이다. 그리고 특정 기반 클래스와 인터페이스를 요구하기 때문이다.

자바빈즈에 관련된 예제들 
/***********************************
* *
* PersonBean.java *
* *
************************************/
public class PersonBean implements java.io.Serializable
{
    private String name;
    private boolean coding;

    // 기본 생성자 (인자가 없는).
    public PersonBean()
    {

    }

    public String getName()
    {
        return this.name;
    }
    public void setName(String name)
    {
        this.name = name;
    }

    // Different semantics for a boolean field (is vs. get)

    public boolean isCoding()
    {
        return this.coding;
    }

    public void setCoding(boolean coding)
    {
        this.coding = coding;
    }
}

/***********************************
* *
* TestPersonBean.java *
* *
************************************/

public class TestPersonBean
{
    public static void main(String[] args)
    {

        PersonBean person = new PersonBean();
        person.setName("Bob");
        person.setCoding(true);

        // Output: "Bob [coding]"
        System.out.print(person.getName());
        System.out.println(person.isCoding() ? " [coding]" : "");
    }
}

실제 적용 사례 
AWT, Swing 그리고 SWT와 같은 자바 GUI 툴킷의 컴포넌트에 자바빈즈 관례들을 사용하고 있다. 그리고 위에 언급된 툴킷의 컴포넌트들은 이클립스의 Visual Editor와 같은 GUI 편집기에서 컴포넌트간 계층을 유지하고 'getter'와 'setter' 메서드들을 통해 컴포넌트에 접근하게 한다.

같이 보기 
 엔터프라이즈 자바빈즈

외부 링크 
 Oracle's JavaBeans tutorials
 JavaBeans specification

자바 플랫폼
아키텍처 패턴
소프트웨어 디자인 패턴