inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

강의 내용중 이해안되는 부분 질문드립니다.

173

whdk333

작성한 질문수 31

0

@Entity
@Table(name = "order_item")
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class OrderItem {

    @Id
    @GeneratedValue
    @Column(name = "order_item_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "item_id")
    private Item item; //주문 상품

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "order_id")
    private Order order; //주문

    private int orderPrice; //주문 가격

    private int count; //주문 수량


    //==생성 메서드==//
    public static OrderItem createOrderItem(Item item, int orderPrice, int count) {

        OrderItem orderItem = new OrderItem();
        orderItem.setItem(item);
        orderItem.setOrderPrice(orderPrice);
        orderItem.setCount(count);
        item.removeStock(count);
        return orderItem;
    }


    //==비즈니스 로직==// //****************이 부분입니다**************************//
    /** 주문 취소 */
    public void cancel() {
        getItem().addStock(count);
    }


    //==조회 로직==//
    /** 주문상품 전체 가격 조회 */
    public int getTotalPrice() {
        return getOrderPrice() * getCount();
    }
}

비즈니스 로직의 주문 취소에서 getItem().addStock(count)이 아니고 item.addStock(count)아닌가요? 어떻게 getItem()으로 addStock메소드를 호출가능한가요?

감사합니다.

강의 김영한강사님 스프링 spring 질문

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

whdk333님, 질문 주신 부분에 대해 설명드리겠습니다.

OrderItem 클래스에서 getItem() 메서드는 private Item item 필드에 대한 접근자(accessor) 메서드입니다. @Getter 어노테이션을 통해 Lombok이 자동으로 생성해줍니다. 따라서 getItem() 메서드를 호출하면, 이 OrderItem 인스턴스에 연결된 Item 인스턴스를 반환받게 됩니다. 반환받은 Item 인스턴스에 대해 addStock(count) 메서드를 호출하는 것이므로, getItem().addStock(count)item.addStock(count)을 호출하는 것과 동일한 작업을 수행합니다.

item 필드에 직접 접근하는 대신 getItem() 메서드를 사용하는 이유는 여러 가지가 있을 수 있습니다. 객체지향 설계 원칙 중 하나는 클래스의 내부 구현을 캡슐화하여 외부에서는 접근자 메서드를 통해서만 접근할 수 있도록 하는 것입니다. 이는 나중에 클래스의 내부 구현이 변경되더라도 해당 객체를 사용하는 외부 코드에 영향을 덜 주도록 설계하는데 도움이 됩니다.

또한, 접근자 메서드를 사용하면 필드에 접근하기 전에 추가적인 로직을 수행할 수 있는 기회를 제공합니다. 예를 들어, getItem() 메서드 내에서 item 필드가 null인지 검사하고, null이면 예외를 발생시키는 등의 처리를 할 수 있습니다.

이와 같은 이유로 getItem().addStock(count)는 객체 지향적인 설계 관점에서 완전히 타당하며, item.addStock(count)와 기능적으로 동일합니다.

질문에 도움이 되었길 바랍니다. 추가적인 궁금증이 생기시면 언제든지 질문해주세요!

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

11

1

servlet과 container에 대한 질문입니다

0

21

1

RepositoryTest의 패키지 위치가 domain인 이유

0

22

2

도메인 모델에서 관계와 규칙을 구분하는 방법

0

35

2

UserService, CertificationService 책임 분리 기준 질문

0

23

1

spring initialiser 어떤걸 선택해야될지 모르겠어요

0

31

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

47

2

Json 요청 처리

1

28

2

로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.

0

25

2

Build 관련 문제 (테스트 관련 문제)

0

38

2

job, step execution 관련 질문 드립니다.

0

27

2

이미지 업로드와 db 트랜잭션 묶는법

0

40

1

sdk 설정 오류

0

46

2

Orchestration SAGA 패턴 보상에 대한 질문입니다.

0

49

2

[건의][6장][작전1] deprecated 메소드

1

44

2

[예제][3장][작전2] windows 에서 마지막 예제

0

37

1

NaverBookRepository.class 의 위치에 따른 모듈간의 의존성에 대해 질문드립니다.

1

30

2

Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4

0

45

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

27

1

패키지 vs 모듈 선택 기준

0

49

2

오탈자 - @Transactional

0

53

1

타입스크립트

0

44

1

인덱스 관련 질문 있습니다.

0

64

2

..

0

74

2