JPA Entity 만들기

coldbrew·2023년 10월 19일
0

프로젝트를 진행하면서 @Getter, @Setter 어노테이션을 사용했습니다. 하지만 공부를 하면서 @Setter를 남발하며 사용한다면 문제가 발생할 수 있다는 내용을 찾았습니다. 왜 setter를 사용하면 안되는지 이유를 정리하려고 합니다!!!

사용하면 안되는 이유

1. @Setter를 사용하면 값을 변경한 의도를 파악하기 힘듬.

public Member updateMember(long id) {
    final Member member = findById(id);
    member.setFistName("value");
    member.setLastName("value");
    member.setAge("value");
    return member;
}

위의 코드처럼 @setter를 나열한 것만으로 어떤 의도로 데이터를 변경하는지 명확히 알 수 없다.

2. 객체의 일관성을 유지하기 어려움.

자바 빈 규약을 따르는 @Setter는 접근 제어자가 public으로 언제든지 변경할 수 있는 상태. 모든 곳에서 접근이 가능해서 객체의 일관성을 유지하기 어렵다.

@Setter를 대체할 수 있는 방법
1. 단순 생성자
2. 빌더 패턴
3. 정적 팩토리 메서드


일반적으로 위의 코드처럼 작성했었다.

1. 단순 생성자

이렇게 생성자를 오버로딩하는 방법도 있지만 멤버변수가 많고 다양한 생성자를 가져야 한다면 코드가 길어지고 가독성이 떨어지는 일이 발생. 이를 해결하기 위해 Builder 패턴을 사용.

2. 빌더 패턴

빌더패턴은 요구사항에 맞게 필요한 데이터만 이용하여 유연한 클래스 생성이 가능. 다양한 생성자들이 사라지고 전체 생성자 하나만을 가지고 있는 형태로 변경되어 유지보수 및 가독성이 향상. 객체를 생성할 때 인자 값의 순서가 상관없다는 장점.

3. 정적 팩토리 메서드

정적 팩토리 메서드를 한마디로 정의하자면 객체 생성의 역할을 하는 클래스 메서드이다.
정적 팩토리 메서드를 사용한다면 이름을 가질 수 있기 때문에 반환될 데이터를 추측할 수 있다.

마무리...!!

엔티티를 생성하면서 @Setter를 사용하면 안되는 이유를 공부하면서 많이 혼란스러웠다.
처음 배웠던 방식이 쉽고 빠른 방식이라 익숙해진 결과겠지만, 효율적인 방식을 공부해서 사용하는게 그래도 보람차다!!!!

0개의 댓글