Lombok (롬복)@(annotation, 어노테이션) 사용하여 코드를 줄여주고 간소화해주는 인기 있고 널리 사용되는 라이브러리

 

  1. 코드 간결성: Getter, Setter, toString 등과 같은 반복적인 코드를 자동으로 생성하여 코드의 양을 줄여준다. 이로 인해 코드가 더 간결해지고 가독성이 좋아진다
  2. 생산성: 반복적인 작업을 줄일 수 있으므로, 생산성을 향상시킨다
  3. 유지 보수성: 코드 중복을 줄여주고 일관된 코드 스타일을 유지하도록 도와주기 때문에, 유지 보수가 더 쉬워진다

Annotation 종류

 

@Getter / @Setter

import lombok.Getter;
import lombok.Setter;

@Getter
public class User {
	@Setter String id;
	@Getter @Setter String name;
	int age;
}

class 전체에 부여할 수 있고, 컬럼에도 사용이 가능하다

 


@ToString

import lombok.ToString;

@ToString
public class User {
	String id;
	String name;
	int age;
}

클래스의 toString() 메서드를 자동으로 생성하여 객체의 문자열을 만든다

 


@EqualsAndHashCode

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class User {
	String id;
	String name;
	int age;
}

equals()와 hashCode() 메서드를 생성한다. 객체의 내용을 비교하고 해싱할 수 있으므로 동등성 비교와 해시 테이블에서의 사용이 용이해진다.

나는 의문이 들었다. 기본 Object 객체에도 equals()hashCode()가 존재하는데 lombok@EqualsAndHashCode는 뭐가 다르다고 하는걸까?

		User user1 = new User();
		user1.setId("userId");

		User user2 = new User();
		user2.setId("userId");

		System.out.println(user1.hashCode());
		System.out.println(user2.hashCode());
		System.out.println(user1.equals(user2));

@EqualsAndHashCode 어노테이션을 사용하지 않았다면 (Object 객체의 hashCode(), equals() 함수 사용했다면), 두 객체의 hashCode가 다르게 나오고 equals() 함수는 false를 리턴한다.

→ Java의 Object 객체의 함수는 객체의 참조 (메모리 주소) 기반으로 동작하기 때문이다

 

하지만 어노테이션을 사용했다면, 두 객체의 hashCode 값은 동일하고, equals() 함수는 true를 리턴한다.

Lombok 어노테이션은 메모리 주소를 참조하는 것이 아니라, 객체의 내용을 비교하기 때문이다

 

@EqualsAndHashCode(exclude = {"name", "age"})

위와 같이 선언하면 name, age 컬럼 내용은 제외하고 id 컬럼의 값만 비교하겠다는 뜻이 된다.

@EqualsAndHashCode(of = {"id"})

id 값만 비교하겠다는 뜻이다. 위와 동일하다.  이 외에도 callSuper, onParam 등 여러가지 속성이 있다고 한다.

 

 

어노테이션 (그리고 속성) 선언만으로도, hashCode() equals() 함수를 오버라이드하여 작성하는 수고를 줄여준다.


@AllArgsConstructor / @NoArgsConstructor

 

생성자를 자동으로 생성하는 어노테이션이다.

@AllArgsConstructor는 모든 컬럼(필드)를 인자로 받는 생성자를 생성한다.

 

@NoArgsConstructor는 파라미터 없는 기본 생성자를 생성한다

@NoArgsConstructor(force=true)

옵션을 사용하면, 사용자 정의 생성자가 이미 존재하는 경우에도 기본 생성자를 강제로 생성한다.

또한 컬럼(필드) 값들을 null, 0, false 등과 같은 값으로 초기화 시켜준다


@Builder

 

		User user = User.builder()
					.id("userId")
					.name("userName")
					.age(10)
					.build();

선언만으로도, 빌더 패턴을 생성하여 객체를 쉽게 생성할 수 있도록 해준다


@Data

 

@Getter, @Setter, @EqualsAndHashCode, @ToString 의 어노테이션을 한 번에 적용할 수 있다

 


@Slf4j

 

@Slf4j
@RestController
@RequestMapping("user")
public class UserController {

	@Autowired
	private UserService userService;

	@GetMapping("all")
	public List<String> getAllUser() throws Exception {

		User user = User.builder()
					.id("userId")
					.name("userName")
					.age(10)
					.build();
		
		log.info(user.toString());
		
		
		return userService.getAllUser();
	}

}

SLF4J(Logger)를 사용할 수 있다

 


Lombok 설치

 

Download

 

projectlombok.org

Lombok 파일을 다운로드 받고, 파일이 있는 위치로 가서 java -jar 명령어를 실행
Install / Update. Eclipse가 실행되어있다면 재시작

https://mvnrepository.com/artifact/org.projectlombok/lombok

적당한 버전의 Lombok을 선택합니다. 제 프로젝트는 gradle로 생성했습니다

compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.16.10' 의 내용을 프로젝트 build.gradle의 dependencies 안에 추가해줍니다.

Project 우 클릭 - Gradle - Refresh Gradle Project
lombok 라이브러리가 추가된 것을 확인

 

'JAVA > Spring' 카테고리의 다른 글

[Springboot] MyBatis (feat. MySQL)  (1) 2023.09.11
[Springboot] MVC 패턴과 폴더 구조  (0) 2023.09.04
[Springboot] 스프링부트 시작하기  (0) 2023.09.03

+ Recent posts