Lombok (롬복)은 @(annotation, 어노테이션) 사용하여 코드를 줄여주고 간소화해주는 인기 있고 널리 사용되는 라이브러리
- 코드 간결성: Getter, Setter, toString 등과 같은 반복적인 코드를 자동으로 생성하여 코드의 양을 줄여준다. 이로 인해 코드가 더 간결해지고 가독성이 좋아진다
- 생산성: 반복적인 작업을 줄일 수 있으므로, 생산성을 향상시킨다
- 유지 보수성: 코드 중복을 줄여주고 일관된 코드 스타일을 유지하도록 도와주기 때문에, 유지 보수가 더 쉬워진다
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 설치
https://mvnrepository.com/artifact/org.projectlombok/lombok
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.16.10' 의 내용을 프로젝트 build.gradle의 dependencies 안에 추가해줍니다.
'JAVA > Spring' 카테고리의 다른 글
[Springboot] MyBatis (feat. MySQL) (1) | 2023.09.11 |
---|---|
[Springboot] MVC 패턴과 폴더 구조 (0) | 2023.09.04 |
[Springboot] 스프링부트 시작하기 (0) | 2023.09.03 |