@Getter, @Setter 와 @Data

namkun·2021년 8월 2일
0

Spring

목록 보기
18/18

흔하게 어노테이션을 쓰다보면, 편하게 All-in-One의 느낌으로 @Data 를 사용하는 경우가 많다.
그러나 이는 지양해야하는 행동이다.

왜?

흔히 화장품에서 보듯 올인원 제품은 좋지않ㄱ....가 아니라...
무분별히 @Data를 사용하면, 안에 들어가있는 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 도 같이 사용되는 것이기에 발생하는 문제들이 존재한다.

1. @Setter

setter의 무분별한 사용은 객체의 안전성을 보장하기 어렵게 만든다.
setter를 사용함과 동시에 객체는 언제든지 변경될 수 있는 상태로 변하기 때문!

2. @ToString

To String 메서드를 만들지 않고 사용할 수 있게 하는 @ToString은 JPA와 같은 ORM을 사용할 때 문제가 될 수 있다.
두개의 모델이 있다고 생각해보자. 하나는 부모, 하나는 자식이다.


@Data
public class Parents{
    String name;
    int age;
    List<Sun> suns;
}

@Data
public class Sun{
    String name;
    int age;
    Parent parent;
}

그런 경우에는 서로간의 ToString이 무한대로 호출되어 stackoverflow가 발생할 수 있다.

그러니까 우리는 앞으로 @Data 보다는 필요에 맞춰서 안에 들어가는 요인들을 잘 사용할 수 있도록 하자.

profile
개발하는 중국학과 사람

0개의 댓글