인프런 커뮤니티 질문&답변
강의 자료 관련 질문입니다! (2-4. 절차에서 객체로)
해결된 질문
작성
·
22
1
영호님 안녕하세요 😊
이번에는 2-4강을 듣던 도중 강의 자료와 관련된 질문을 드려요
Q. DiscountCondition을 책임지는 로직을 DiscountPolicy로 이동할 때,
DiscountPolicy 클래스에 있는
findDiscountCondition()메서드의 접근 제어자가 private으로 되어있는 부분은 public으로 변경하고ReservationService 클래스의
reserveScreening()메서드에서policy.findDiscountCondition(screening, conditions);
으로 생각하면 될까요?!
2-4 강의자료 page 10 (강의 02:29)

2-4 강의자료 page 11 (강의 02:42)

답변 2
1
테디베어님 안녕하세요.
강의 자료를 보니 말씀하신 것처럼 findDiscountCondition 메서드의 가시성은 public으로 수정하는게 맞습니다.
장표를 만들면서 실수로 그 부분까지는 확인을 못하고 넘어간 것 같네요.
혹시 코드가 이상하다면 github에 올라가 있는 코드와 비교해 보시면 좋아요. 🙂
https://github.com/eternity-oop/object-basic-02-04/blob/main/src/main/java/org/eternity/reservation/domain/DiscountPolicy.java
동영상 부분이 수정하기 어려워서 고민인데 이렇게 질문 남겨 주시면 나중에라도 한번 모아서 오류 있는 부분을 수정하도록 하겠습니다.
꼼꼼하게 봐주셔서 감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다.
테디베어님께서 2-4 강의 자료 중 DiscountCondition 로직의 이동과 관련하여 질문 주셨네요. 질문에 대한 답변과 관련된 내용을 함께 설명드릴게요.
로직 이동의 이해
책임의 이동:
- 강의에서 설명하듯, DiscountCondition을 판단하는 책임을 ReservationService에서 DiscountPolicy로 이동시키는 것은 객체지향 원칙 중 하나인 책임 할당을 명확하게 하기 위함입니다.
findDiscountCondition()메서드를 이동함으로써, 할인 조건에 대한 판단은 DiscountPolicy 내에서 처리되므로, 보다 응집도 높은 설계를 이룰 수 있습니다.
- 강의에서 설명하듯, DiscountCondition을 판단하는 책임을 ReservationService에서 DiscountPolicy로 이동시키는 것은 객체지향 원칙 중 하나인 책임 할당을 명확하게 하기 위함입니다.
접근 제어자:
findDiscountCondition()메서드의 접근 제어자를 public으로 변경하라는 부분은, 이 메서드가 외부에서 사용될 수 있도록 하기 위함입니다. 그러나, 만약 이 메서드가 내부적으로만 사용되어야 한다면 protected로 설정하여 하위 클래스에서만 접근하도록 할 수 있습니다.
- 여기서는 강의의 의도에 맞추어
public으로 설정하여,ReservationService에서 직접 호출하기 쉽게 하는 것이었습니다.
로직 흐름:
- 강의자료의 예시처럼
policy.findDiscountCondition(screening, conditions)로 호출하여, Screening 객체의 컨디션을 검사하게 됩니다.
- 강의자료의 예시처럼
관련 설명
캡슐화와 책임 할당은 객체지향 설계에서 굉장히 중요한 부분입니다. DiscountPolicy 클래스가 행동(할인 조건 판단)과 데이터를 모두 가지고 있게 되어, 응집도가 높은 클래스를 설계하게 됩니다. 이 구조는 변경에 의한 영향을 국한시키며, 외부에서 내부 구현을 변경하지 않고 기능을 사용할 수 있게 합니다.
유사한 질문 및 답변 참고
이와 관련되어 기존에 논의된 내용들은 아래 링크에서도 확인할 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드린 것입니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





확인 감사합니다!!