Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- rest api
- 스프링부트
- @Profile
- AuthenticationPrincipal
- webjar
- 알고리즘
- JsonSerializer
- 브루트포스
- 다익스트라
- application.properties
- 외부설정
- 리소스 서버
- 스프링 부트
- Application Runner
- Spring Security
- OAuth2
- HttpMessageConverters
- @ConfigurationProperties
- cors
- 리소스핸들러
- EnableAutoConfiguration
- Application Event
- 정적 리소스
- HATEOAS
- WebApplication Type
- 백트래킹
- Application Argument
- 백기선
- JPA
Archives
- Today
- Total
아카이브
[스프링 기반 REST API 개발] Event 도메인 구현 본문
package me.jumen.demoinflearnrestapi.events;
import lombok.*;
import java.time.LocalDateTime;
@Builder @AllArgsConstructor @NoArgsConstructor
@Getter @Setter
@EqualsAndHashCode(of="id")
public class Event {
private Integer id;
private String name;
private String description;
private LocalDateTime beginEnrollmentDateTime;
private LocalDateTime closeEnrollmentDateTime;
private LocalDateTime beginEventDateTime;
private LocalDateTime endEventDateTime;
private String location; // (optional) 이게 없으면 온라인 모임
private int basePrice; // (optional)
private int maxPrice; // (optional)
private int limitOfEnrollment;
private boolean offline;
private boolean free;
private EventStatus eventStatus = EventStatus.DRAFT;
}
1. 왜 @EqualsAndHasCode에서 of를 사용하는가
- 복잡한 양방향 연관관계일 경우 ToString을 호출하면 무한루프가 발생할 수 있다.
- 모든 필드를 사용해서 equals(), hashCode()를 구현하기 때문에, 양방향 연관관계일 경우 무한루프가 발생할 수 있다.
2. 왜 @Builder를 사용할 때 @AllArgsConstructor가 필요한가
- 클래스에 @Builder 어노테이션을 사용하면 전체 파라미터를 갖는 생성자를 자동으로 만들어 준다.
- 클래스에 사용하는 경우, default 생성자로 생성이 되어 다른 패키지에서 이를 사용하기 곤란하다.
- @AllArgsConstructor는 모든 필드에 대해서 파라미터를 받는 생성자를 만들어 낸다. 예를 들어, id의 경우 auto_increment에 의존하고 있을 때 어노테이션을 통해 id를 넘겨받을 수 있기 때문에 문제가 발생할 수 있다.
- 되도록이면 조건에 따라 파라미터를 받는 생성자를 생성하고 @Builder를 이곳에 붙이는 것이 바람직하다.
public class Member {
@Builder
public Member(String email, String name) {
this.email = email;
this.name = name;
}
}
3. @Data를 쓰지 않는 이유
- 복잡한 양방향 연관관계일 경우 ToString을 호출하면 무한루프가 발생할 수 있다.
- @Data는 모든 어노테이션을 자동으로 설정해 주는 것(@ToString 포함)
- 한쪽 객체에서 다른 쪽 객체에 대해 @ToString(excluded={“propertyName”}) 형태로 제외토록 만들어야 한다.
'Spring > 스프링 기반 REST API 개발' 카테고리의 다른 글
[스프링 기반 REST API 개발] Spring HATEOAS 적용 (0) | 2021.01.06 |
---|---|
[스프링 기반 REST API 개발] 입력 받을 수 없는 값의 경우 Bad Request (0) | 2021.01.05 |
[스프링 기반 REST API 개발] 테스트코드 리팩토링 - 파라미터 테스트 (junit-jupiter-params) (0) | 2021.01.05 |
[스프링 기반 REST API 개발] Bad Request 응답 본문 (Errors, JsonSerializer & @JsonComponent, BindingError&Validator ) (0) | 2021.01.05 |
[스프링 기반 REST API 개발] Event 생성 API, 테스트 코드 (0) | 2021.01.05 |