
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을 사용하면, 다양한 어노테이션을 통해 자주 사용되는 코드 (예: getter, setter, toString, equals, hashCode 메서드 등)를 자동으로 생성할 수 있습니다.
@Data는 Lombok에서 제공하는 어노테이션 중 하나로, 클래스에 붙이면 다음과 같은 메서드들을 자동으로 생성해줍니다:
- 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를 제공하지 않을 수도 있습니다.
- 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());
사용 시 유의점
• 모든 필드를 포함해야 합니다. 특정 필드를 누락하면 정보가 불완전할 수 있습니다.
• 중요한 정보나 비밀스러운 데이터는 포함하지 않는 것이 좋습니다. (예: 비밀번호)
- 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 값도 같아야 합니다.
- 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는 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) 생성자Lombok의 @Data 어노테이션을 사용하면 자바 클래스를 더욱 간결하고 효율적으로 작성할 수 있습니다. 이를 통해 개발자는 비즈니스 로직에 더 집중할 수 있으며, 코드의 품질을 높일 수 있습니다.
