[JDBC (10) ] Lombok라이브러리 (@Data 어노테이션 , @AllArgsConstructor어노테이션)

Yeonbi_Kim·2024년 7월 22일
post-thumbnail
package org.scoula;
import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class UserVo {

    private final String id;
    private final String email;
    private final String password;
}

Lombok 라이브러리

Lombok은 자바에서 반복적인 코드를 줄이고, 코드를 간결하게 유지하는 데 도움을 주는 라이브러리입니다. Lombok을 사용하면, 다양한 어노테이션을 통해 자주 사용되는 코드 (예: getter, setter, toString, equals, hashCode 메서드 등)를 자동으로 생성할 수 있습니다.

@Data 어노테이션

@Data는 Lombok에서 제공하는 어노테이션 중 하나로, 클래스에 붙이면 다음과 같은 메서드들을 자동으로 생성해줍니다:

  1. Getter 메서드: 모든 필드에 대한 getter 메서드를 생성합니다.
  2. Setter 메서드: 모든 비-final 필드에 대한 setter 메서드를 생성합니다.
  3. toString 메서드: 클래스의 모든 필드를 포함한 toString 메서드를 생성합니다.
  4. equals 메서드: 모든 필드를 기준으로 하는 equals 메서드를 생성합니다.
  5. hashCode 메서드: 모든 필드를 기준으로 하는 hashCode 메서드를 생성합니다.
  1. Getter 메서드

개념 정의

Getter 메서드는 클래스의 필드 값을 외부에서 읽을 수 있도록 접근하는 메서드입니다. 일반적으로 필드의 값을 반환합니다.

사용하는 이유

•	캡슐화: 객체 지향 프로그래밍에서 데이터 은닉을 위해 필드를 private으로 선언하고, 외부에서 필드 값을 안전하게 읽기 위해 사용합니다.
•	데이터 접근: 객체의 상태를 읽기 위해 사용합니다.


```

java

public class User {
private String name;

public String getName() {
    return name;
}

}

java

User user = new User();
String userName = user.getName();

사용 시 유의점

	•	필요한 필드에 대해서만 생성해야 합니다. 불필요한 getter는 객체의 캡슐화를 해칠 수 있습니다.
	•	비즈니스 로직이 포함되지 않도록 합니다. getter 메서드는 단순히 값을 반환해야 합니다.





> 2. Setter 메서드

개념 정의

Setter 메서드는 클래스의 필드 값을 외부에서 변경할 수 있도록 하는 메서드입니다. 일반적으로 필드의 값을 설정합니다.

사용하는 이유

	•	캡슐화: 필드에 직접 접근하지 않고, 메서드를 통해 안전하게 값을 변경하기 위해 사용합니다.
	•	데이터 유효성 검사: 값을 설정할 때 유효성 검사를 수행할 수 있습니다.
    
    
    ```
    java
    
  public class User {
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}
User user = new User();
user.setName("Alice");

사용 시 유의점

•	데이터 유효성 검사를 반드시 해야 합니다. 잘못된 값을 설정하면 객체의 상태가 불안정해질 수 있습니다.
•	불변 객체를 만들기 위해 setter를 제공하지 않을 수도 있습니다.
  1. toString 메서드
    개념 정의
    toString 메서드는 객체의 정보를 문자열로 반환하는 메서드입니다. 디버깅이나 로깅 시 객체의 상태를 쉽게 파악할 수 있도록 합니다.
    사용하는 이유
    • 디버깅: 객체의 필드 값을 문자열로 출력하여 디버깅을 쉽게 합니다.
    • 로깅: 객체의 상태를 로깅할 때 유용합니다.
public class User {
 private String name;
 private int age;

 @Override
 public String toString() {
     return "User{name='" + name + "', age=" + age + "}";
 }
}
User user = new User();
System.out.println(user.toString());

사용 시 유의점

•	모든 필드를 포함해야 합니다. 특정 필드를 누락하면 정보가 불완전할 수 있습니다.
•	중요한 정보나 비밀스러운 데이터는 포함하지 않는 것이 좋습니다. (예: 비밀번호)
  1. equals 메서드
    개념 정의
    equals 메서드는 두 객체의 내용이 같은지를 비교하는 메서드입니다. 객체의 필드 값을 기준으로 비교합니다.
    사용하는 이유
•	객체 비교: 두 객체가 같은지를 비교할 때 사용합니다. 특히 컬렉션에서 유용합니다.
사용법

```
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);
}
}


```User user1 = new User();
User user2 = new User();
boolean isEqual = user1.equals(user2);

사용 시 유의점

•	필드 값을 기반으로 비교해야 합니다. 객체 참조를 비교하면 안 됩니다.
•	hashCode 메서드와 일관성을 유지해야 합니다. 두 객체가 같으면 hashCode 값도 같아야 합니다.
  1. hashCode 메서드
    개념 정의
    hashCode 메서드는 객체의 해시 코드를 반환하는 메서드입니다. 주로 해시 기반 컬렉션 (예: HashMap, HashSet)에서 사용됩니다.
    사용하는 이유
•	해시 기반 컬렉션에서 객체를 빠르게 찾기 위해 사용합니다.
•	equals 메서드와 함께 객체의 동일성을 판단하는 데 사용됩니다.

사용법

public class User {
    private String name;
    private int age;

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
User user = new User();
int hashCode = user.hashCode();

사용 시 유의점

•	equals 메서드와 일관성을 유지해야 합니다. 두 객체가 같으면 해시 코드도 같아야 합니다.
•	가능한 한 고유한 해시 코드를 생성해야 합니다. 충돌이 많으면 해시 기반 컬렉션의 성능이 저하됩니다.

이렇게 각 메서드의 개념, 사용하는 이유, 사용법, 사용 시 유의점을 이해하고 활용하면 객체 지향 프로그래밍에서 더욱 효과적으로 코드를 작성할 수 있습니다.


@AllArgsConstructor 어노테이션

@AllArgsConstructor는 Lombok에서 제공하는 또 다른 어노테이션으로, 모든 필드를 매개변수로 가지는 생성자를 자동으로 생성해줍니다.

예제 코드 설명

스크린샷에 있는 코드 예제를 통해 어떻게 동작하는지 살펴보겠습니다:

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class UserVo {
    private final int id;
    private final String email;
    private final String password;
}

위 코드는 Lombok을 이용해 UserVo 클래스에 여러 유용한 메서드들을 자동으로 생성합니다:

  • @Data: UserVo 클래스에 getter, setter, toString, equals, hashCode 메서드를 자동으로 생성합니다.
  • @AllArgsConstructor: UserVo 클래스에 모든 필드를 매개변수로 가지는 생성자를 자동으로 생성합니다.

즉, 위의 코드만으로도 UserVo 클래스는 다음과 같은 메서드들을 자동으로 가지게 됩니다:

  • getId(), getEmail(), getPassword()
  • toString(), equals(Object o), hashCode()
  • UserVo(int id, String email, String password) 생성자

왜 사용하는가?

  1. 코드 간결성: 반복적으로 작성해야 하는 코드를 줄여줍니다.
  2. 유지보수성 향상: 코드의 가독성을 높이고, 유지보수를 쉽게 만들어 줍니다.
  3. 버그 감소: 수동으로 getter, setter 등을 작성하다 발생할 수 있는 실수를 줄여줍니다.

Lombok의 @Data 어노테이션을 사용하면 자바 클래스를 더욱 간결하고 효율적으로 작성할 수 있습니다. 이를 통해 개발자는 비즈니스 로직에 더 집중할 수 있으며, 코드의 품질을 높일 수 있습니다.

0개의 댓글