작성
·
6
0
[질문 내용]
OrderItem에서 가격 총합을 구할 때
자기 자신의 필드임에도
return orderPrice * count;
이렇게 바로 쓰기 보다는
public int getTotalPrice() {
return getOrderPrice() * getCount();
}
get으로 가져오시더라구요.
그렇다면 Order에서는
//==조회 로직==
public int getTotalPrice() {
int totalPrice = 0;
for (OrderItem orderItem : orderItems) {
totalPrice += orderItem.getTotalPrice();
}
return totalPrice;
}
for문에 orderItems에도 getOrderItems()로 하셨었나? 하고 봤더니 이거는 바로 접근을 하시는데
자기 필드를 get으로 접근 하는 것이 조금 어색한데, 혹시 이유가 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. ᄒᄉ 님의 질문에 대해 답변드리겠습니다.
주어진 코드를 기반으로 자신의 필드를 직접 접근하지 않고 getter 메서드를 통해 접근하는 이유에 대해 궁금해 하셨습니다. 아래 링크에서 관련된 토론이 있습니다.
주요 이유는 다음과 같습니다:
캡슐화: 객체지향 프로그래밍에서 캡슐화는 중요한 원칙입니다. 객체의 상태를 외부에서 직접 접근하지 못하게 하고, 필요한 경우 메서드를 통해서만 접근하도록 합니다. 이는 코드를 이해하기 쉽게 만들고, 코드가 변경될 때 영향을 최소화합니다.
일관성 유지: getter를 통해 일정한 방식으로 필드에 접근함으로써 코드의 일관성을 유지할 수 있습니다. 이렇게 하면 코드의 다른 부분에서 필드를 갱신하는 모든 로직이 특정 메서드로 집중되므로 버그를 줄일 수 있습니다.
프록시 객체 처리: JPA에서는 프록시 객체가 사용될 수 있으며, 이러한 경우 직접 필드에 접근하면 예상치 못한 동작이 발생할 수 있습니다. getter 메서드를 사용하면 이러한 문제를 회피할 수 있습니다.
이에 반해, 내부 구현에서는 자신의 필드를 직접 접근하는 것이 일반적일 수 있습니다. 이는 불필요한 메서드 호출을 줄이고, 코드 성능을 미세하게 최적화할 수 있기 때문입니다. 결국 이러한 선택은 개발자의 스타일에 따라 다소 달라질 수 있으며, 중요한 것은 일관성을 유지하는 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.