[Java] record 클래스와 Lombok 라이브러리
by 우와한개발자
DTO(Data Transfer Object)
- 순수하게 데이터를 담아 계층 간으로 전달하는 객체
- 다른 로직을 갖지 않고 생성자와 getter, equals(), hashcode()
VO(Value Object)
- 값 자체로 의미를 가지는 객체
- 식별자(ID)가 없음
- equals()와 hashCode()로 값 비교
[ record 클래스 ]
public record Employee(
int id, String name, double salary
){
// 컴팩트 생성자
public Employee{
if(id<=0) throw new IllegalArgumentException("id 음수 불가");
}
}
- 데이터를 담기 위한 불변(Immutable) 클래스
- Java 16 부터 도입
- 모든 필드는 private final
- 생성자, hashCode()와 equals(), toString(), getter 자동 생성
- record는 getName() 같은 getter가 아니라 접근자(accessor) name()을 생성
- 기본적으로 java.lang.Record 클래스를 상속받아 다른 클래스 상속 불가
- 컴팩트 생성자 compact constructor : 필드 검증(Validation)이나 값 보정(Normalization) 을 위해 사용
[ Lombok 라이브러리]
- 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리
- 자바 프로그래밍에서 반복적인 코드 작성을 줄여주는 유용한 라이브러리.
1. lombok 설정 : sts 이클립스 설정 및 프로젝트 설정
1) 이클립스에 롬복 설정
- https://projectlombok.org/download 롬복 다운로드
- 이클립스 설정파일(.init 파일)에 롬복 추가
//.init 파일과 lombok.jar가 같은 디렉토리에 있는 경우
// 공백 없이!
// -javaagent는-vmargs 보다 아래!
=javaagent:lombok.jar
// 절대경로 써도 됨.
2) 프로젝트에 롬복 적용
- 프로젝트/lib 폴더 생성 후 다운로드 받은 lombok.jar파일 드래그
- Build Path 설정(그래야 사용 가능)
- 프로젝트 우클릭 → Build Path → Configure Build Path → Libraries의 Classpath → Add JARs → 프로젝트/lib 폴더내 추가한 lombok.jar 선택
- 이클립스 재시작
2. lombok 사용 및 주요 어노테이션
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
| 어노테이션 | 설명 |
| @Getter, @Setter | getter/setter 자동 생성 |
| @ToString | toString() 메서드 자동 생성 |
| @EqualsAndHashCode | equals()와 hashCode() 메서드 자동 생성 |
| @NoArgsConstructor | 매개변수가 없는 기본 생성자 자동 생성 |
| @AllArgsConstructor | 모든 필드를 매개변수로 가지는 생성자 자동 생성 |
| @RequiredArgsConstructor | final 필드와 @NonNull 필드만 매개변수로 가지는 생성자 자동 생성 |
| @Builder | 빌더 패턴을 사용할 수 있도록 Builder 클래스 자동 생성 |
| @Data | @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 기능 포함 |
| @Slf4j | SLF4J Logger 객체(log) 자동 생성 |
'언어 > Java' 카테고리의 다른 글
| [Java] 문자열 클래스(String, StringBuffer, StringBuilder) (0) | 2026.03.04 |
|---|---|
| [Java] 파일 입출력 - 입출력 스트림과 직렬화(Serialization) (0) | 2026.03.04 |
| [Java] 라이브러리(Library) & 모듈(module) & 리플렉션(reflection) (0) | 2026.03.04 |
| [Java] 주석(/, /*, /**)과 공백, 식별자와 예약어 (0) | 2026.03.03 |
| [Java] 내부 클래스(nested Class)와 익명 클래스(Anonymous Class) (0) | 2026.03.03 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자