롬복 @Getter 와 @Setter에 대해서

이동영·2024년 3월 8일

자바 개념정리

목록 보기
6/21
  • 클래스의 필드에 @Getter 혹은 @Setter 어노테이션을 선언하면 롬복은 기본적인 getter/setter메서드를 제공한다.
  • 기본적은 getter는 단순한 필드를 반환한다.
  • 만약에 필드 이름이 foo라면 기본적으로 setFoo라는 반환타입이 없는 setter를 호출하며 필드와 동일한 유형의 매개변수 1개를 사용한다.
  • 간편하게 필드의 value를 설정할 수 있다.

getter/setter는 명시적으로 AccessLevel을 지정하지 않는이상 기본적으로 public으로 제공이 된다.
AccessLevel은 PUBLIC, PROTECTED, PACKAGE, PRIVATE가 있다

또한 필드에도 선언할 수 있지만 Class에도 @Getter/@Setter를 선언할 수 있다. 이러한 방식은 인스턴스 필드 전체에 어노테이션을 붙이는것이다.

AccessLevel.NONE으로 설정하면 getter/setter를 수정적으로 비활성화 할 수 있다. 이를 통하여 클래스의 @Getter @Setter 어노테이션을 재정의 할 수 있다.

선언한 어노테이션에 method를 추가하기 위해서는 onMethod=@__({@AnnotationsHere})와 같이 선언해야 한다.

선언한 setter메소드는 유일하게 method매개변수에 onParam=@__({@AnnotationsHere})와 같이 어노테이션을 추가할 수 있다. 하지만 주의 해야할 것은 이 기능은 실험적이다. 자세한 내용은 https://projectlombok.org/features/experimental/onX를 참조 한다.

JAVADOC란?

JDK와 함께 패키지로 제공되는 도구 이다. JDK가 설치되어 있으면 JAVADOC을 사용할 수 있으며 JAVA소스코드의 문서를 생성하는데 도와주는 일종의 도구이다.https://docs.oracle.com/javase/8/docs/api/ 는 JAVADOC으로 생성된 html 문서이다.
javadoc은 html을 따로 작성하지 않아도 소스코드에 작성된 코멘트에 따라 문서를 만들 수 있다.

lombok v1.12.0버전에서는 필드에 작성된 javadoc주석이 생성된 getter setter메소드에도 자동적으로 javadoc주석을 생성해주며 @return은 getter로 복제되는것이고 @Param은 setter메소드에 주석 내용이 복제된다. @Return주석은 필드의 javadoc 주석에서 삭제되고 getter메서드로 주석이 이동됨을 의미한다.

즉 @Param @return 어노테이션을 필드에 지정하면 롬복에 의해 생성된 getter/setter메소드에 대해 설명을 개별적으로 지정할 수 있다.

GETTER / SETTER라는 이름의 색션을 생성하여 그 안에 getter setter에 대한 설명을 정의할 수 있다. 이것은 롬복에서 지원하는 기능이며 getter setter를 생성할 때, 각 메소드의 javadoc주석에 고유한 설명을 추가하고자 사용한다. 이를 위해 '@section' 어노테이션을 사용하여 GETTER 및 SETTER 섹션을 정의하고, 각 섹션에 원하는 설명을 추가할 수 있다.

다음 예제에서 javadoc주석을 확인할 수 있다.

롬복을 적용한 경우

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

public class GetterSetterExample {
  /**
   * Age of the person. Water is wet.
   * 
   * @param age New value for this person's age. Sky is blue.
   * @return The current value of this person's age. Circles are round.
   */
  @Getter @Setter private int age = 10;
  
  /**
   * Name of the person.
   * -- SETTER --
   * Changes the name of this person.
   * 
   * @param name The new value.
   */
  @Setter(AccessLevel.PROTECTED) private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
}

순수 자바 코드

public class GetterSetterExample {
  /**
   * Age of the person. Water is wet.
   */
  private int age = 10;

  /**
   * Name of the person.
   */
  private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
  
  /**
   * Age of the person. Water is wet.
   *
   * @return The current value of this person's age. Circles are round.
   */
  public int getAge() {
    return age;
  }
  
  /**
   * Age of the person. Water is wet.
   *
   * @param age New value for this person's age. Sky is blue.
   */
  public void setAge(int age) {
    this.age = age;
  }
  
  /**
   * Changes the name of this person.
   *
   * @param name The new value.
   */
  protected void setName(String name) {
    this.name = name;
  }
}
profile
가치를 제공하는 개발자

0개의 댓글