트러블슈팅과 고민

객체와 쿼리최적화에 대한 고민 (2025년 3월 21일)

정재익 2025. 8. 3. 00:35

 

2025년 3월 21일의 고민 노션에서 옮겨오고 있습니다.

 

고민

 

농부 클래스와 농작물 클래스가 있다. 농부는 많은 농작물을 가질 수 있어서 농작물과 농부는 다대일 단방향 매핑을 했다. 외래키는 농작물에 있다.

이때 농작물의 좌표를 바꾼다(농작물을 옮겨심는다)라는 기능은 농부 클래스에 있어야 할까? 농작물 클래스에 있어야할까?

 

농부가 농작물을 옮겨 심는다는게 자연스럽지만 농부 레포지터리에서 농작물 레포지터리에 접근해서 해당 농부가 가지고 있는 농작물을 조회하고 그 농작물의 id를 골라 좌표를 바꿔야한다.

농작물에 농작물을 옮겨 심는다는 기능을 넣으면 좀 이상하지만 농작물 레포지터리에서 농작물 id를 찾고 좌표 바꾸면 끝이다.

농작물이 무생물이라 조금 헷갈린다 좌표 바꾸는 기능은 농작물 클래스에 넣는게 맞는건가?


해결

 

농작물의 이동은 농작물 클래스에 포함하는 것이 맞다. 현실에서 농작물은 무생물이지만 객체지향 프로그래밍에서 객체의 상태를 변경하는 책임은 객체 자신에게 있어야한다. 즉, 농작물이 팔이 돋아나서 스스로 이동하는 것을 상상하면 안된다.

클래스안에는 기능과 선언이 포함되어있다. 농작물 '객체'를 이동하는 것은 농작물의 기능이고 농작물 클래스에 있어야한다.