JavaBean 규약
인프런 김영한님의 강의 내용 중 자바빈 규약에 대한 내용이 나왔다.
자바빈 규약에 대해 찾아보니 개발할 때 지키는 룰같은 기본적인 내용이었다. 그 내용에 대해 한번 정리해 볼 필요가 있을 것 같아 이 글을 쓰게 되었다.
자바빈(JavaBean)
자바빈이란 특정한 기능을 지닌 컴포넌트를 말하는 것이 아니라, 간단하게 말하면 자바빈 규약 또는 자바빈 관례에 따라 만들어진 클래스를 의미한다.
자바빈 규약
자바빈은 자바빈 규약(관례, 규칙)을 따르는 클래스이다. 자바빈 규약에는 다음과 같은 규칙들이 있다.
1. 패키지 - 자바빈은 기본(default) 패키지 이외의 특정 패키지에 속해 있어야 한다.
default package에 속해있는 클래스는 코드를 봐도 어느 패키지에 속하는지 package 키워드가 명시되어있지 않다.
public class BeanTest { }
자바빈 규약을 만족하기 위해서는 특정 패키지에 속해있어야 한다.
package com.app.beanTest;
public class BeanTest { }
2. 기본 생성자가 존재해야 한다.
오버로딩 되지 않은, 즉 매개변수 값이 없는 기본 생성자가 존재해야 한다.
package com.app.beanTest;
public class BeanTest {
public BeanTest(){ }
}
3. 멤버변수의 접근 제어자는 private으로 선언되어야 한다.
멤버변수의 직접 전근할 수 없도록 private로 선언되어야 한다.
package com.app.beanTest;
public class BeanTest {
private String key;
public BeanTest(){ }
}
4. 멤버변수에 접근 가능한 getter와 setter 메서드가 존재해야 한다.
3번 규칙 때문에 해당 멤버변수에 접근 가능한 getter와 setter 메서드가 필요하다.
메서드를 작성할 때에도 규칙이 있는데 getter의 경우 get멤버변수이름, setter의 경우에는 set멤버변수이름 방식으로 작성해야 한다. 이때 멤버변수 이름의 첫 글자는 대문자로 바꿔줘야 한다. (예. getKey(), setKey())
5. getter와 setter 메서드 접근자가 public으로 선언되어야 한다.
4번과 연결되는 규칙으로 getter와 setter는 어느 패키지에서나 접근 가능하도록 public으로 선언되어야 한다.
package com.app.beanTest;
public class BeanTest {
private String key;
public BeanTest(){ }
public String getKey(){
return key;
}
public void setKey(String key){
this.key = key;
}
}
6. 직렬화되어있어야 한다.(선택사항)
객체 직렬화란 객체를 입출력에 사용할 수 있도록 객체의 멤버들을 바이트 형태로 변환시키는 것이다.
java.io.Serializable 인터페이스를 상속하여 직렬화를 할 수 있다.
객체를 바이트 스트림으로 변환하는 것을 마샬링(Marshalling)이라고 하며, 반대로 객체화하는 것을 언마샬링이라고 한다.
package com.app.beanTest;
import java.io.Serializable;
public class BeanTest implements Serializable {
private static final long serialVersionUID = -16624189829575485L;
private String key;
public BeanTest(){ }
public String getKey(){
return key;
}
public void setKey(String key){
this.key = key;
}
}
IntelliJ serialVersionUID 생성 방법
Preferences > Editor > Inspections > JVM languages
Serializable class without 'serialVersionUID' 체크
클래스명에 option+enter “Create constant field ‘serialVersionUID’ in ‘클래스’”를 클릭하면 생성 완료!
참고