@Setter를 남발하면 안되는 이유

노영석·2023년 1월 16일
0

프로젝트를 진행하면서 Entity에 모두 @Getter, @Setter를 부여했었다. 피드백으로 @Setter는 중요한 Entity에 사용했을 때, 부작용이 생길 수 있으니 주의하라는 피드백을 받았었는데 JPA를 공부하면서 한번 더 정리해보려 한다.

값타입은 단순하고 안전하게 다룰 수 있어야 한다.

 Address address = new Address("city", "street", "10000")

Member member = new Member();
member.setUsername("member1");
member.setHomeAddress(address);

Member member2 = new Member();
member2.setUsername("member2");
member2.setHomeAddress(address);

member.getHomeAddress.setCity("newCity");

위와 같이 공유하는 값타입을 Setter로 변경할 경우 member1과 member2의 address가 모두 변하는 결과를 초래한다.

이 문제를 해결하는 방법은 @Setter를 사용하는 한 완전히 예방할 수가 없다. 그래서 값타입을 @Setter를 사용하지 않는 불변객체(immutable object)로 설계해야 한다. 또한, 불변객체는 값타입 컬렉션을 사용할 때에도 적용하는 것이 좋다.

  Address address = new Address("city", "street", "10000")

Member member = new Member();
member.setUsername("member1");
member.setHomeAddress(address);

Address address2 = new Address("newCity", address.getStreet(), address.getZipcode());

Member member2 = new Member();
member2.setUsername("member2");
member2.setHomeAddress(address2);

member.setHomeAddress(Address);

불변객체로 Setter를 대신하려면 여러 방법이 있지만 객체를 새로 만들어서 넣어주는 방법이 유효하다.

profile
공부하자!

0개의 댓글