Spring) Lombok

DONG HEON·2021년 10월 26일
0

Spring

목록 보기
4/7

Lombok

Java 언어를 이용해 개발을 하면 반복적으로 생성해야하는 코드가 많다. 이를 자동화하여 코드 다이어트를 해주는 것이 Java 필수 라이브러리 Lombok이다.

Lombok 이란?

Lombok은 어노테이션을 기반으로 코드를 자동완성 해주는 라이브러리이다. Lombok을 이용하면 Getter, Setter, Equals, ToString 등과 같이 다양한 코드를 자동완성 할 수 있다.

Lombok의 장점

  • 어노테이션 기반의 코드 자동 생성을 통한 생산성 향상
  • 반복되는 코드 다이어트를 통한 가독성 및 유지보수성 향상
  • Getter, Setter 외에 빌더 패턴이나 로그 생성 등 다양한 방면으로 활용 가능

Lombok 기능 및 사용 예제

@Getter, @Setter

Lombok에서 가장 자주 사용되는 어노테이션이다. @Getter, @Setter를 클래스 이름 위에 적용시키면 모든 변수들에 적용이 되고, 변수 이름 위에 적용시키면 해당 변수에만 적용이 된다.

@AllArgsConstructor

@AllArgsConstructor는 모든 변수를 사용하는 생성자를 자동완성 시켜주는 어노테이션이다.

@AllArgsConstructor
public class Student {

	private String name;
	private String telNum;

/*	@AllArgsConstructor는 다음 코드를 생성하는 것과 같다
	public Student(String name, String telNum) {
		this.name = name;
		this.telNum = telNum;
	}
*/

}

@NoArgsConstructor

@NoArgsConstructor는 어떠한 변수도 사용하지 않는 기본 생성자를 자동완성 시켜주는 어노테이션이다.

/*	@NoArgsConstructor는 다음 코드를 생성하는 것과 같다
	public Student() {}
*/

@RequiredArgsConstructor

@RequiredArgsConstructor는 특정 변수만을 활용하는 생성자를 자동완성 시켜주는 어노테이션이다. 생성자의 인자로 추가할 변수에 @NotNull 어노테이션을 붙여서 해당 변수를 생성자의 인자로 추가할 수 있다. 아니면 해당 변수를 final로 선언해도 의존성을 주입받을 수 있다.

@AllArgsConstructor
public class Student {
	
	@NotNull
	private String name;
	private String telNum;
	private final Integer age;

/* @RequiredArgsConstructor 통해 생성자를 자동 생성할 수 있다.
	public Student(String name, Integer age) {
		this.name = name;
		this.age = age;
	}
*/
}

@EqualsAndHashCode

@EqualsAndHashCode 어노테이션을 활용하면 클래스에 대한 Equals 함수와 HashCode 함수를 자동으로 생성해준다. 서로 다른 두 객체에서 특정 변수의 이름이 똑같은 경우 같은 객체로 판단을 하고 싶다면 다음과 같이 하면 된다.

@RequiredArgsConstructor
@EqualsAndHashCode(of={"name", "age"})
public class Student {

	@NotNull
	private String name;
	private String telNum;
	private final Integer age;
	
}

위와 같이 설정을 해주면 name, age가 같은 객체는 서로 같다고 결과 값이 나온다.

@ToString

@ToString 어노테이션을 활용하면 클래스의 변수들을 기반으로 ToString 메소드를 자동으로 완성시켜준다. 출력을 원하지 않는 변수에는 @ToString.Exclude를 붙여주면 출력을 제외할 수 있다. 또한 상위 클래스에 대해도 적용시키고자 하면 (callSuper = true)를 적용시키면 된다.

@Data

@Data 어노테이션을 활용하면 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 자동완성 시켜준다. 너무 무겁고 객체의 안정성을 지키기 위해 사용을 지양한다고 한다.

@Builder

@Builder 어노테이션을 활용하면 해당 클래스의 객체의 생성에 Builder 패턴을 적용시켜준다. 모든 변수들에 대해 build하기를 원한다면 클래스 위에 @Builder를 붙이면 되지만, 특정 변수만을 build하기 원한다면 생성자를 작성하고 그 위에 @Builder 어노테이션을 붙이면 된다.

@Delegate

@Delegate 어노테이션은 한 객체의 메소드를 다른 객체로 위임시켜 준다.

public class Score {
	private String subject;
	private Integer score;
}

public class Student {

	@NotNull
	private String name;
	private String telNum;
	private final Integer age;
	@Delegate
	private List<Score> scoreList;
	
}

기존에 scoreList를 추가하기 위해서는 student.getscoreList().add()를 선언해줘야 사용이 가능하지만 @Delegate를 사용하면 student.add()로 사용이 가능하다.

profile
같이 일하고 싶은 사람이 되자😁

0개의 댓글