티스토리 뷰
반응형
쓰는 방식
public record MyRecordVo(
Long id,
String name,
String phone
) {
public String region() {
return Arrays.stream(phone.split("-")).findFirst().orElseThrow(RuntimeException::new);
}
}
- record로 설정한다.
- ( ) 괄호 안에 원하는 타입과 필드 이름을 설정한다.
- 추가적인 메소드는 {} 안에 작성하면 된다. (위의 메소드는 억지로 작성한 것이니 그냥 넘어가주셔도 됩니다 ㅎㅎ)
특성
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html
https://docs.oracle.com/javase/specs/jls/se16/html/jls-8.html#jls-8.10
- 기본적으로 정의된 타입과 이름에 따라 public 접근제어자와 return type 그리고 method name이 정해진다.
- 해당 값들은 immutable 하다 ( 즉 Vo 에 쓰기 적절하다)
- 암묵적으로 final 제어자가 붙게 된다.
- 동일한 키워드가 레코드 선언의 수정자로 두 번 이상 나타나거나 레코드 선언에 public, protected 및 private 중 하나 이상의 액세스 수정자가 있는 경우 컴파일 시간 오류
- equals, hashCode, toString 들은 멤버 변수에 맞게 정의된다.
- 생성자를 정확히 하나만 지정하는 이유는 해당 변수 값들을 validate 하기 위함이다.
public void record(MyRecordVo vo) {
log.info("record id = {}, name = {}, phone = {}", vo.id(), vo.name(), vo.phone());
Class<?> superclass = vo.getClass().getSuperclass();
log.info("classes = {}", superclass);
}
record로 정의한 java의 경우 상위 클래스가 뭔지 알아보기 위해 찍어봤다.
18:20:51.011 [Test worker] INFO com.playground.springplayground.java.RecordService - classes = class java.lang.Record
보통 클래스들은 extends를 하지 않는 이상 superClass는 Object 이다.
근데 record로 설정한 경우 java.lang.Record 이다
Record
public abstract class Record {
protected Record() {}
@Override
public abstract boolean equals(Object obj);
@Override
public abstract int hashCode();
@Override
public abstract String toString();
}
해당 추상 클래스를 상속하여 구현하게 되는 것이다.
그렇기에 record로 설정한 경우 extends 를 사용할 수 없다는 것을 유념해야 한다.
사용처
- 위에서 말한 것 처럼 Value Object로 사용할 경우 이용하기에 적절하다. 그 이유는 VO 의 경우 값이 바뀌면 안되고, 수정해서는 안되는 것이 기본이므로 왠만한 Vo 의 경우 record를 사용하기에 적절하다.
반응형
'JVM > Spring' 카테고리의 다른 글
[Spring] @EventListener (0) | 2022.10.06 |
---|---|
[Spring] @Async 비동기로 처리하는 방법 (0) | 2022.10.01 |
[Spring] @Scheduled, @EnableScheduling (0) | 2022.10.01 |
[Spring] Scope (Prototype & Singleton) (2) | 2022.09.13 |
[Hikari CP] 光 살펴보기 - 4 (0) | 2022.04.29 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Pattern
- headers
- 프로그래머스
- Java
- docker
- thread
- 백준
- Command Line
- Python
- Spring
- 2021 KAKAO BLIND RECRUITMENT
- 카카오
- Celery
- django
- postgres
- setattr
- env
- 자바
- DRF
- dockerignore
- ubuntu
- PostgreSQL
- docker-compose
- BFS
- Collections
- 그래프
- 파이썬
- 알고리즘
- Linux
- 면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함