@Getter, @Setter
// lombok 적용 전
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
public String getSeq() {
return seq;
}
public String getEmail() {
return email;
}
public String getPassword() {
return password;
}
public String getNickname() {
return nickname;
}
public void setSeq(Long seq) {
this.seq = seq;
}
public void setEmail(String email) {
this.email = email;
}
public void setPassword(String password) {
this.password = password;
}
public void setNickname(String nickname) {
this.nickname = nickname
}
}
자바로 개발하다보면 인스턴스의 멤버 변수 값을 가져오고 바꾸기 위해 Getter와 Setter를 사용한다. Getter와 Setter는 멤버 변수 각각에 대응하기 때문에 위와 같이 멤버 변수가 추가될 때 마다 코드 길이가 길어지는 단점이 있다.
// lombok 적용 후
@Getter
@Setter
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
}
이런 경우 위와 같이 해당 객체 클래스 위에 @Getter, @Setter 어노테이션을 추가하여 간단히 Getter, Setter 메서드를 사용할 수 있다.
@NoArgsConstructor, @AllArgsConstructor
// lombok 적용 전
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
public User() {}
public User(Long seq, String email, String password, String nickname) {
this.seq = seq;
this.email = email;
this.password = password;
this.nickname = nickname;
}
}
자바는 클래스 내 생성자가 없으면 기본 생성자를 만들어준다. 하지만 위와 같이 기본 생성자 외의 생성자가 있는 경우 기본 생성자를 사용하기 위해서는 따로 선언해주어야 한다. 이럴 때 @NoArgsConstructor를 사용할 수 있다.
또한 모든 멤버 변수를 파라미터로 가지는 생성자를 만들어야 하는 경우가 있는데, 이럴 때 @AllArgsConstructor를 사용할 수 있다.
// lombok 적용 후
@NoArgsConstructor
@AllArgsConstructor
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
}
@RequiredArgsConstructor
// lombok 적용 후
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
}
@RequiredArgsConstructor는 어노테이션이 초기화 되지않은 final 필드나, @NonNull이 붙은 필드에 대해 생성자를 생성해준다. 주로 위와 같이 생성자로 의존성 주입을 할 때 사용된다.
@ToString
// lombok 적용 전
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
@Override
public String toString() {
return "User{" +
"seq=" + seq +
", email='" + email + '\'' +
", password='" + password + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
}
toString은 어떤 객체를 설명하는 문자열을 리턴한다. 위와 같이 Override를 통해 toString을 사용하면 필드의 개수가 많아질 수록 내부 코드가 길어지는 문제가 있다.
// lombok 적용 후
@ToString(exclude = "password")
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
}
위와 같이 활용할 수 있으며, exclude 옵션을 주어 특정 필드를 제외시킨 문자열을 리턴할 수도 있다.
@EqualsAndHashCode
// lombok 적용 전
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(seq, user.seq)
&& Objects.equals(email, user.email)
&& Objects.equals(password, user.password)
&& Objects.equals(nickname, user.nickname));
}
@Override
public int hashCode() {
return Objects.hash(seq, email, password, nickname);
}
}
우리는 동등성 비교가 필요할 때 equals and hashCode를 재정의하여 사용한다. 위와 같이 Override를 통해 equals and hashCode을 사용하면 필드의 개수가 많아질수록 내부 코드가 길어지는 문제가 있다.
// lombok 적용 후
@EqualsAndHashCode(exclude = "password")
public class User{
private Long seq;
private String email;
private String password;
private String nickname;
}
위와 같이 활용할 수 있으며 exclude 옵션을 주어 특정 필드를 제외시킨 값에 대한 동등성 비교를 할 수 있다.
'BE > Java' 카테고리의 다른 글
유클리드 호제법으로 최대공약수 최소공배수 구하기 (0) | 2022.07.17 |
---|---|
Math 클래스 메서드 정리 (0) | 2022.07.14 |
String 클래스 메서드 정리 (0) | 2022.07.14 |
외부 API 파싱하기 (JSON) (0) | 2022.02.07 |
댓글