728x90
320x100
롬복(Lombok) 이란?
- 롬복(Lombok)은 자바 개발자들이 코드 작성을 더욱 편리하게 할 수 있도록 도와주는 라이브러리이다.
롬복(Lombok)의 특징
- 컴파일 시점에 코드를 추가한다.
- 별도의 라이브러리를 추가로 설치해야 한다.
- IDE의 플러그인을 지원한다.
[자주 쓰는 기능]
@Getter, @Setter
- 클래스의 필드에 대한 getter, setter 메서드를 자동으로 생성해 준다.
- 코드의 양을 줄이고, 가독성을 높일 수 있다.
[사용전]
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
[사용 후]
@Getter
@Setter
public class User {
private String name;
private int age;
}
@ToString
- 클래스의 필드를 문자열로 변환하는 toString 메서드를 자동으로 생성해 준다.
- 객체의 상태를 쉽게 확인할 수 있다.
[사용 전]
public class User {
private String name;
private int age;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
[사용 후]
@ToString
public class User {
private String name;
private int age;
}
@EqualsAndHashCode
- 클래스의 필드를 기반으로 equals, hashCode 메서드를 자동으로 생성해 준다.
- 객체의 동일성을 정확하게 판단할 수 있다.
[사용 전]
public class User {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
[사용 후]
public class User {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
@RequiredArgsConstructor
- final 또는 @NonNull이 붙은 필드만 포함하는 생성자를 자동으로 생성해 준다.
- 코드의 양을 줄이고, 객체의 초기화를 간편하게 할 수 있다.
[사용 전]
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
[사용 후]
@RequiredArgsConstructor
public class User {
private final String name;
private final int age;
}
@Data
- 해당 클래스의 모든 필드에 대한 getter, setter 메서드를 자동으로 생성해 준다.
- 해당 클래스의 모든 필드를 문자열로 변환하는 toString 메서드를 자동으로 생성해 준다.
- 해당 클래스의 모든 필드를 기반으로 equals, hashCode 메서드를 자동으로 생성해 준다.
[사용 전]
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
[사용 후]
import lombok.Data;
@Data
public class User {
private String name;
private int age;
}
@Data 사용을 지양해야 하는 이유
이렇게 보면 @Data 매우 편리한 기능이고, @Data만 사용하면 다될 것 같지만 실제 실무에서는 사용을 지양하고 있다. 이유는 아래와 같다.
1. 코드의 가독성을 해칠 수 있다. -> 자동으로 생성된 메서드들은 클래스의 내부 구조를 숨기기 때문에 코드의 가독성을 해칠 수 있다.
2. 유지 보수가 어려울 수 있다. -> 직접 작성한 코드에 비해 버그가 발생할 가능성이 높다.
3. 특정 필드에 대한 접근 권한을 제한하기 어렵습니다. -> 모든 필드에 대해 공개 접근이 가능하기 때문에 보안상의 문제가 발생할 수 있다.
첫번째, 두번째 이유보다 개인적으롤 세번째 이유가 가장 크다고 생각한다. 특정 필드에 대한 접근 권한을 제한하기 어렵기 때문에 특히 Setter를 풀어놓으면 어디서든 누구나 수정이 가능하고 나중에 에러가 난다고해도 찾기가 쉽지 않기 때문이다.
- 인텔리제이에서 롬복 설치하고 활성화하는 방법
https://ddururiiiiiii.tistory.com/400
- 스프링 어노테이션 알아보기
https://ddururiiiiiii.tistory.com/484
- @Data 사용을 지양하는 이유
https://ddururiiiiiii.tistory.com/369
728x90
320x100
'💻 하나씩 차곡차곡 > Back-end' 카테고리의 다른 글
[HTTP] URL / URN / URI (정의 / 특징 / 차이점) (0) | 2024.08.06 |
---|---|
[HTTP] 인터넷 네크워크 (IP(인터넷 프로토콜), TCP/UDP, PORT, DNS) (0) | 2024.08.05 |
[스프링(Spring)] HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 (@RequestParam, @RequestBody, @ModelAttribute 이해하기) (0) | 2024.08.02 |
[스프링(Spring)] 어노테이션(Annotation)이란? (특징, 원리, 자주 쓰는 어노테이션 정리) (0) | 2024.08.02 |
[스프링부트(Spring boot)/Log4jdbc] 콘솔창에 쿼리문 + 테이블형태 결과값 로그 남기기 (0) | 2024.06.11 |