작성
·
302
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
변경 감지 코드로 수정 메서드를 작성하던 중 setter를 없애고 ItemService의 updateItem() 안의 setter들을 대체하기 위해
public void updateItem(String name, int price, int stockQuantity){
this.name = name;
this.price = price;
this.stockQuantity = stockQuantity;
}
이 코드로 Item클래스 안에 작성했습니다.
@Transactional
public void updateItem(Long id, String name, int price, int stockQuantity) {
Item item = itemRepository.findOne(id);
item.updateItem(name, price, stockQuantity);
// item.setName(name);
// item.setPrice(price);
// item.setStockQuantity(stockQuantity);
}
이렇게 사용하기 위해서 입니다.
하지만 이것도 결국은 setter인데 이렇게 작성하는 게 올바른 방법일까요? 더 좋은 코딩 방법이 있는 지 궁금합니다.
답변 2
1
안녕하세요. 코딩초보님
데이터를 변경해야하기 때문에 수정은 꼭 필요합니다.
하지만 지금의 코드는 단순히 setter만 제공하는 것 보다 의미가 있습니다. 특정 항목을 하나씩 수정하는게 아니라 한번에 수정한다는 의미가 더 포함되어 있으니까요. 추가로 메서드 이름에 의미를 부여할 수 있으면 더 좋습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
코딩초보 님께서 질문하신 변경감지와 관련하여 Item
클래스 내에 setter 메소드 대신 값을 변경하는 메소드를 작성하는 올바른 방법을 문의하신 것으로 이해했습니다. JPA에서 권장되는 방식은 엔티티 내부에서 상태를 변경하는 비즈니스 로직을 작성하는 것인데, 이는 직접적으로 필드 값을 변경하는 것보다 도메인의 의미를 명확하게 드러낼 수 있도록 도와줍니다.
아래는 본인의 질문에 대한 유사한 상황에서의 변경감지에 관한 답변들입니다. 이 답변들은 JPA에서 변경감지와 관련된 작업 방법 및 일반적인 setter 대신 엔티티의 메소드를 통해 값을 세팅하는 방법에 대한 조언을 제공합니다.
질문자님께서 작성하신 코드의 경우 엄밀히 말해서 setter 메소드는 아니며, 엔티티에 명확한 업데이트 메소드를 제공하여 객체의 상태를 변화시키는 괜찮은 접근 방식입니다. 그러나 고민하신 것처럼 엔티티 내부에서 상태를 변경하는 메소드를 정의할 때는 단순한 값 할당 이상의 의미를 부여하는 것이 좋습니다. 예를 들어, updateItem()
메소드의 이름을 adjustInventory()
같이 더 구체적인 이름으로 명시하거나, 해당 메소드를 호출하는 비즈니스 로직과 연관지어서 도메인의 의미를 잘 표현할 수 있는 방향으로 작성하는 것이 바람직합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.