update 메서드 vs setter

김희영·2025년 12월 11일

spring

목록 보기
25/26

Spring + JPA로 개발하다 보면 엔티티 값 변경을 어떻게 처리할지 머리 아파진다.
이때, 할 수 있는 선택지는 두 가지다.

  1. 엔티티 필드마다 set필드명() 을 호출하는 방식
  2. 엔티티 내부에 update()change(), rename() 같은 메서드를 정의하는 방식

뭘 써야 할까나


1. Setter로 엔티티를 수정하는 방식

member.setName("홍길동");
member.setAddress("서울");

장점

  • 빠르고 직관적이다.
  • JPA 변경 감지를 통해 자동으로 update 쿼리가 나간다.

단점

1) 엔티티가 “무방비” 상태가 된다

어디서든 setter만 호출하면 값이 바뀝니다.
심지어 특정 로직에서 실수로 잘못된 값이 들어와도 막을 방법이 없다.

2) 도메인 규칙을 적용할 수 없다

“가격은 0원 미만이면 안 된다”,
“이메일은 변경 불가능하다”
이런 규칙을 setter는 전혀 보호할 수 없다.

3) 객체지향적으로 문제가 생긴다

엔티티가 단순 데이터 구조체처럼 변하고,
“도메인의 의미 있는 상태 변화”를 표현하지 못함.


2. update 메서드를 사용하는 방식

엔티티에 함수를 하나 파는거다.

public void changePrice(int price) {
    if (price <= 0) throw new IllegalArgumentException("가격은 0보다 커야 합니다.");
    this.price = price;
}

장점

1) 도메인 규칙을 강제할 수 있다

잘못된 값이 엔티티로 진입하는 순간 바로 차단.

2) 엔티티가 자기 자신의 상태를 관리한다

엔티티가 데이터 보관소가 아니라
“스스로 보호하며 의미 있게 변하는 객체”가 됨.

3) 코드 의도가 명확하다

product.changePrice(10000);
product.rename("새 상품명");

이 코드를 보는 것만으로 “무엇을” 하는지 바로 이해가 됨.

4) 유지보수에 강하다

setter 방식에서는 어디서 값이 바뀌는지 추적하기 어려움.
하지만 update 메서드를 쓰면 “이 필드를 언제 수정할 수 있는지”가 명확해짐.

단점

  • 메서드가 약간 늘어날 수 있다
    → 하지만 명확성이 훨씬 중요합니다.

-> 함수 하나 파서 써라~!

profile
내는 반드시 개발자가 되고 말것어

0개의 댓글