
롬복(Lombok)은 자바 클래스의 생성자, getter, setter 메서드를 자동으로 만들어 주는 라이브러리입니다. 롬복을 사용하면, 생성자, getter, setter를 생성해야 하는 작업을 간단히 해결할 수 있으므로 자주 사용하는 라이브러리입니다.
그럼 예제를 만들어 보겠습니다. 프로젝트 이름은 Ex07Lombok입니다. 사이트 설정에서 Group은 com.study, Artifact와 Name은 Ex07Lombok이고, Package name은 com.study.springboot로 지정한 후 zip을 다운로드후 여기서 풀기를 합니다. 나머지 과정은 전과 동일합니다.

resources폴더의 application.properties에 다음 내용을 추가하고 저장합니다.
server.port=8090
롬복은 그레이드에 정의되어 있습니다. build.gradle파일을 열어보면 아래 부분에서 확인할 수 있습니다.
생략...
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
생략...
com.study.springboot 폴더에서 Member 클래스를 생성해 줍니다. 예제 URL : https://bit.ly/3TDWNVV
package com.study.springboot;
import org.springframework.stereotype.Component;
@Component
public class Member {
//사용자 아이디
private String username;
//사용자 비밀번호
private String password;
}
Member 클래스는 회원가입과 로그인 기능을 구현하기 위해 정의된 클래스입니다. username과 password는 향후 스프링 시큐리티와 소셜 로그인(구글, 네이버, 카카오 등) 기능에 기본적으로 들어가는 필드이므로 추가했습니다.
Member 클래스를 정상적으로 사용하려면, 생성자(기본생성자,필드가 있는 생성자)와 getter, setter 메서드가 필요합니다. 전에는 직접 개발자가 만들어 사용했지만, 롬복의 기능을 이용하여 자동 생성되도록 해보겠습니다.
롬복은 다양한 어노테이션을 지원하는데, 기능을 보면 아래와 같습니다.
@Getter : getter 자동생성
@Setter : setter 자동생성
@NoArgsConstructor : 매개변수 없는 기본생성자 자동생성
@AllArgsConstructor : 모든 필드를 파라미터로 받는 생성자 자동생성
@RequiredArgsConstructor : final이나 @NonNull인 필드만 매개변수로 받는 생성자 자동생성
@NonNull : null을 허용하지 않는 객체 Bean 자동생성
@Nullable : null을 허용하는 객체 Bean 자동생성
@Data : @Getter, @Setter,@RequiredArgsConstructor,
@ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 어노테이션
@ToString : toString 메소드 자동생성
@EqualsAndHashCode : equals, hashCode 메서드 생성
@Getter와 @Setter를 이용하여 getter, setter 메서드를 자동생성 해보겠습니다. 예제 URL : https://bit.ly/3TDWNVV
package com.study.springboot;
import lombok.Getter;
import lombok.Setter;
import org.springframework.stereotype.Component;
@Component
@Getter
@Setter
public class Member {
//사용자 아이디
private String username;
//사용자 비밀번호
private String password;
}
생성된 getter, setter 메서드는 보기>도구 창>구조 메뉴를 클릭하면 구조뷰에서 확인할 수 있습니다. Member 클래스 파일을 클릭하면 구조뷰에서 자동생성된 getter, setter 메서드 목록이 보입니다.

@NoArgsConstructor를 추가하여 매개변수가 없는 기본생성자를 자동생성 해보겠습니다. 예제 URL : https://bit.ly/3TDWNVV
package com.study.springboot;
import lombok.NoArgsConstructor;
생략...
@Component
@Getter
@Setter
@NoArgsConstructor
public class Member {
//사용자 아이디
private String username;
//사용자 비밀번호
private String password;
}

@AllArgsConstructor을 이용하면 모드 필드를 매개변수로 입력받는 생성자가 생성됩니다.
@RequiredArgsConstructor은 final이나 @NotNull이 붙은 필드만 매개변수로 입력받는 생성자가 생성됩니다.
@NonNull은 setter 메서드에 null 값이 들어올 때 NullPointerException을 발생시켜 null 값이 설정되지 않도록 합니다.
반면 @Nullable은 null 값이 설정되도록 허용해 줍니다.
@Data는 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 어노테이션입니다.
com.study.springboot폴더에 User 클래스를 하나 생성해서 추가적으로 알아보겠습니다. 예제 URL : https://bit.ly/3gojGyk
package com.study.springboot;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
class User {
private final String username;
@NonNull
private String password;
}
@RequiredArgsConstructor에 의해 final과 @NonNull이 붙은 필드를 매개변수로 하는 생성자를 만든 것을 알수 있습니다.

@Data를 이용하면, 종합선물세트처럼 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 적용합니다.
package com.study.springboot;
import lombok.Data;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
//@RequiredArgsConstructor
@Data
class User {
private final String username;
@NonNull
private String password;
}

@RequiredArgsConstructor을 이용하면 생성자 주입을 받는 코드를 간략하게 할 수 있습니다.
MainController 클래스를 하나 만들겠습니다. 예제 URL : https://bit.ly/3sdoEAR
package com.study.springboot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MainController {
@GetMapping("/")
@ResponseBody
public String main() {
return "Lombok 예제입니다.";
}
private final Member member;
//생성자 주입
@Autowired
public MainController(Member member) {
this.member = member;
}
}
위의 코드는 전에 배웠던 생성자를 이용한 주입 코드입니다.
롬복의 @RequiredArgsConstructor은 final이 있는 필드를 매개변수로 하는 생성자를 자동으로 만들어주므로, 이를 이용하면 코드를 4줄 생략할 수 있겠습니다. 예제 URL : https://bit.ly/3sdoEAR
package com.study.springboot;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequiredArgsConstructor
public class MainController {
@GetMapping("/")
@ResponseBody
public String main() {
return "Lombok 예제입니다.";
}
private final Member member;
//<삭제된 부분
//@Autowired
//public MainController(Member member) {
// this.member = member;
//}
//삭제된 부분>
}

이제까지 롬복의 기능에 대해서 알아보았습니다.