[Java] 레코드, 롬복(lombok)Language/Java2023. 7. 28. 00:08
Table of Contents
이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다.
레코드(record)
- 데이터 전달을 위한 DTO(Data Transfer Object)를 작성할 때 반복적으로 사용되는 코드를 줄이기 위함
- Java 14부터 레코드가 도입되었다.
- 필드는 읽기만 가능하도록 private final로 선언됨
- 필드가 읽기만 가능하므로 setter가 없고, getter 이름이 단순히 필드 이름이다.
- 동등 비교를 위해 hashCode()와 equals() 메소드가 재정의 되어있다.
- toString()메소드가 재정의 된다.
public record Member(String id, String name, int age) {
}
이렇게 단순하게 클래스명 앞에 recode 만 붙이고 뒤에 사용할 필드들을 나열한다.
그러면 자동으로 각 필드와 getter가 생성되고 hashCode(), equals(), toString() 메소드가 자동으로 오버라이딩되어 생성된다.
Main.java
public class Main {
public static void main(String[] args) {
Member m = new Member("winter", "눈송이", 25);
System.out.println(m.id());
System.out.println(m.name());
System.out.println(m.age());
System.out.println(m.toString());
System.out.println();
Member m1 = new Member("winter", "눈송이", 25);
Member m2 = new Member("winter", "눈송이", 25);
System.out.println("m1.hashCode(): " + m1.hashCode());
System.out.println("m2.hashCode(): " + m2.hashCode());
System.out.println("m1.equals(m2): " + m1.equals(m2) );
}
}
/*
winter
눈송이
25
Member[id=winter, name=눈송이, age=25]
m1.hashCode(): 306065155
m2.hashCode(): 306065155
m1.equals(m2): true
*/
롬복(lombok)
- 롬복은 JDK에 포함된 표준 라이브러리는 아니지만 개발자들이 즐겨 쓰는 자동 코드 생성라이브러리이다.
- 롬복은 레코드와 비슷하지만 더욱 편리한 기능을 제공한다.
- 레코드와 큰 차이점은 필드가 final이 아니며, 값을 읽는 getter와 setter의 이름이 각 getXxx(또는 isXxx), setXxx로 생성된다.
롬복 설치
https://projectlombok.org/download
다운받고 cmd를 통해 다운로드한 경로로 이동하고 아래의 명령어를 입력하면 된다.
당연히 다운로드 경로는 사용자마다 다르다.
설치된 IDE가 나오는데 롬복 라이브러리를 인식하게 할 IDE를 골라준다.
Install / Update 버튼을 누르면 설치가 되고 완료되면 닫아준다.
롬복 사용해보기
원하는 프로젝트에 다운로드한 롬복 JAR을 추가해 준다.
그리고 Build Path를 설정해 준다.
이제 아래와 같이 코드를 작성하면
import lombok.Data;
@Data
public class Member {
private String id;
private String name;
private int age;
}
아웃라인에 자동으로 메소드들이 선언되어 있는 것을 볼 수 있다.
@Data 외에도 아래와 같은 어노테이션을 사용할 수 있다.
tip
@Data에 포함되어 있는 @RequiredArgsConstructor는 기본적으로 매개변수가 없는 생성자를 포함시키지만, final 또는 @NonNull이 붙은 필드가 있다면 이 필드만 초기화시키는 생성자를 포함시킨다.
final과 @NonNull의 차이점은 초기화된 final 필드는 변경할 수 없지만(setter가 만들어지지 않음), @NonNull은 null이 아닌 다른 값으로 setter를 통해 변경할 수 있다는 것이다.
'Language > Java' 카테고리의 다른 글
[Java] 랜덤 숫자(난수) 얻기 (0) | 2023.07.30 |
---|---|
[Java] StringBuilder 클래스, StringTokenizer 클래스 (1) | 2023.07.29 |
[JAVA] API Document (0) | 2023.07.27 |
[JAVA] 사용자 정의 예외 (0) | 2023.07.26 |
[JAVA] 리소스(resource) 자동 닫기 (0) | 2023.07.25 |