java 14에서 preview로 등장했고, java 16때 정식 기능으로 나온 기능입니다.
새로운 java Type 이며, 자바에서 불변객체를 만들기위해, 필요한 코드의 중복을 줄여주는 기능을 합니다.
(👉 Lombok과 매우 비슷 := @Value)
기능
- 모든 프로퍼티를 포함한 생성자 제공
- 모든 프로퍼티에 private final 적용
- 모든 프로퍼티의 getter 메소드 생성
- toString, equals, hashCode 메소드 생성
- 프로퍼티들에게 annotation을 붙일 수 있도록 허용
불변 객체 vs record 타입 vs @Value
✨[Record 타입을 사용하지 않은, 기존의 클래스]
불변 객체를 만들기 위해, 매개변수에 private final 을 붙힘
//Record를 사용하지 않은 클래스
public class Car {
private final String name;
private final int power;
public Car(String name, int power) {
this.name = name;
this.power = power;
}
public String getName() {
return this.name;
}
//setter는 Record에서 제공하지 않음
public void setName(String name) {
this.name = name;
}
public int getPower() {
return this.power;
}
//setter는 Record에서 제공하지 않음
public void setPower(int power) {
this.power = power;
}
}
✨[Record 타입으로 정의한 클래스]
- 매개변수에 따른, 멤버변수 불변 자동생성
- 파라미터 별 생서자 자동 새엇ㅇ
- getter 제공(멤버변수 이름으로 호출)
- setter는 제공하지 않음 ➡️ 블변객체에는 Setter 사용 x
- toString제공
- euqals() 제공
- 모든 필드가 일치할 때 동일한 값을 반환하는 hashCode 메서드
//record 사용
public record Car(String name, int power) {}
✨[Lombok @Value]
- @Data 어노테이션 제공 기능 : @Getter + @Setter + @RequiredArgsConstructor + @ToString + @EqualsAndHashCode
- @Value : 불변객체로 만들어주는, 롬복 어노테이션이다.
- @Data 와 @Value 차이점
- @Value는 모든 필드를 private + final (불변)으로 만든다.
- @Value는 불변객체를 만드는 것이기 때문에 Setter를 사용할 수 없다.
-> Lombok의 @Value기능이 먼저 나왔고, 후에 자바에서 Record가 나왔다. 따라서 기능은 거의 비슷하고,
-> Record는 자바 타입이기 때문에, 롬복처럼 따로 dependency를 해주지 않아도 사용할 수 있다. (jdk14 이후부터)
//Lombok을 사용한 클래스
@Value
public class Car {
String name;
int power;
}
*참고
'Java > Java 문법' 카테고리의 다른 글
추상클래스의 객체 생성 (추상클래스 인스턴스) - 추상클래스를 사용하는 이유 (0) | 2022.09.19 |
---|---|
[Java] 스트림에서 오토박싱 (박싱, 언방식)이 일어나는 이유 (0) | 2022.09.16 |
[JAVA8] Stream API란 - fiter /map /of 사용방법 (0) | 2022.05.24 |
private final VS private static final 왜 쓸까 (0) | 2022.03.10 |
ArrayList<Dto> Map value 값으로 정렬 (0) | 2022.01.16 |