inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

177

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

17

1

안녕하세요 치킨 디도스 이벤트 보고 흉내내보려 들어왔습니다..

0

26

2

실무 내용 문의드려요

0

27

2

SingletonService가 JVM이 뜰 때 생성되는게 맞나요?

0

63

2

임포트 오류

0

38

2

답을언제쯤받아볼수있나요

0

54

2

형 책 어떻게 받아?

1

60

1

@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.

0

33

2

mvc 패턴 - 적용 강의에서 회원가입할 때 redirect가 아닌 forward인 이유가 궁금합니다.

0

30

1

프로젝트가 없어요..

0

60

2

JpaCursorItemReader의 정렬 조건 부재의 영향

1

47

2

changeTeam 메서드 질문

0

35

1

"컴파일 시점에 없는 값을 어떻게 참조할 것인가?" 섹션

1

54

2

테스트 관련 질문!

0

57

2

handleBindException 의 기대의도가 방향이 맞는지 궁금합니다.

0

43

2

SpringBoot 4.0.6 버전에서 PackageLogTracePostProcessor exception

0

89

3

인텔리제이 오류

0

53

1

프로젝트 의존 관계

0

53

2

application.properties가 적용되지 않아요

1

76

3

새 프로젝트 속 제너레이터에 SpringBoot가 없습니다.

0

55

2

섹션3. 11 회원객체 다이어그램

0

37

1

OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.

0

37

1

강의 연장 요청

0

49

2

설정 정보 없이 임베디드 데이터베이스 생성

0

41

1