본문 바로가기

Spring

@Setter

VO (Value Object) - 데이터 그 자체로 의미 있는 것을 담아 두는 객체 

DTO (Data Transfer Object) - 전송되는 데이터 객체

빌더패턴 : 객체의 생성을 쉽게 한다. 

 

@Setter를 사용하면 객체를 언제든지 변경할 수 있는 상태가 되어서 객체 안정성을 보장받기 힘들다. 즉, 무분별하게 사용하면 객체의 상태가 어디서 바뀌는지 모르는 문제가 발생한다.

이 문제의 해결방법으로는 Value Object로 만들어서 객체를 Value처럼 사용한다. 즉, 새로운 객체를 만드는 방법이 있다.

 

그래서 JPA에서 Update 작업시, 엔티티에서 @Setter를 사용하지 않고 빌더패턴으로(일부만 변경해서 새로운 객체를 생성하는 작업)을 사용했다. 즉, setter를 빌더패턴으로 대체했다.

하지만 이 방법은 문제점이 있다. Update할 때 객체를 복사하는 것은 얕은 복사로 인해 문제가 발생할 수 있다.

얕은 복사의 문제점은 객체가 실제 Value처럼 작동 되지 않고 다른 객체를 참조하면서 문제가 발생할 수 있다. 

 

따라서 엔티티에 @Setter를 사용하였다.

'Spring' 카테고리의 다른 글

Bean 과 DI  (0) 2020.01.14
IOC  (0) 2020.01.14
토비의 스프링3.1 - 템플릿 메소드 패턴, 팩토리 메소드 패턴  (0) 2019.03.03
Spring Security + Spring MVC  (0) 2019.02.04
Spring Security  (0) 2019.02.03