작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
30
·
수정됨
1
5-1강의 7분 10초 경에서 추상 클래스인 DiscountPolicy의 calculateDiscount 메소드 구현 관련하여 질문 있습니다.
calculateDiscount 메서드의 로직에서 상영(screening)이 DiscountCondition 중 하나라도 만족하면 getDiscountAmount(screening)이 호출되는데, 이 때 AmountDiscountPolicy와 PercentDiscountPolicy 중 누가 오버라이드한 getDiscountAmount가 호출되는지 궁금하여 질문드립니다.
애초에 Movie 객체가 생성될 때 AmountDiscountPolicy와 PercentDiscountPolicy 중 해당되는 할인 정책을 멤버 변수로 사용할 수 있게 된다고 이해하면 될까요?
객체지향에 대해 심도 있게 배울 수 있는 강의라 너무 잘 듣고 있습니다. ㅎㅎ
답변 2
1
안녕하세요.
좋은 질문 남겨 주셔서 감사합니다. 🙂
강의가 도움이 되신다고 말씀해 주시니 정말 기분이 좋네요.
말씀하신 것처럼 Movie는 자신이 협력할 DiscountPolicy 타입의 인스턴스 변수 dsicountPolicy를 포함하고 있습니다.
discountPolicy에 AmountDiscountPolicy 인스턴스가 전달되면 런타임에 AmountDiscountPolicy의 getDiscountAmount() 메서드가 실행되고, PercentDiscountPolicy 인스턴스가 전달되면 런타임에 PercentDiscountPolicy의 getDiscountAmount() 메서드가 실행됩니다.
이렇게 하기 위해서는 Movie 인스턴스를 생성할 때나 생성한 후에 어떤 DiscountPolicy를 사용할 지를 지정해 줘야 합니다.
예를 들어 아래와 같이 Movie 객체를 생성하면 PercentDiscountPolicy의 getDiscountAmount()메서드가 실행되게 됩니다.
더 자세한 내용은 이어지는 "5.3 유연하고 일관적인 협력"에서 다루고 있으니 해당 부분을 참고해 주시면 이해하시는데 도움이 되실겁니다.
행복한 한가위 보내시고 더 궁금한 부분 있으면 언제라도 질문 남겨주세요!
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
leesy399님께서 질문하신 내용은 객체지향 프로그래밍의 다형성에 대한 중요한 이해를 돕는 부분입니다. calculateDiscount
메서드에서 getDiscountAmount(screening)
이 호출될 때, 어떤 메서드가 실행될지는 객체의 실제 클래스에 따라 결정됩니다.
다형성: 객체지향 프로그래밍에서 다형성은 동일한 메서드 호출이 객체의 타입에 따라 다르게 동작하게 해주는 중요한 개념입니다. 다형성 덕분에 하나의 인터페이스나 슈퍼클래스(이 경우 DiscountPolicy)의 같은 메서드를 상속받은 여러 서브클래스(AmountDiscountPolicy, PercentDiscountPolicy)에서 각각 다르게 구체화(Overriding)할 수 있습니다.
호출되는 메서드: DiscountPolicy
클래스의 서브클래스가 무엇인지에 따라 getDiscountAmount(screening)
호출 시 실행되는 메서드가 달라집니다. 만약 screening
객체가 AmountDiscountPolicy
타입이라면, AmountDiscountPolicy
가 오버라이드한 getDiscountAmount
가 호출될 것입니다. 반대로, PercentDiscountPolicy
타입이라면 해당 클래스의 메서드가 호출됩니다. 이는 런타임 시점에 객체의 실제 타입에 따라 결정을 내리는 방식(동적 바인딩)으로 이루어집니다.
강의에서 설명된 구체적인 예제와 코드 흐름은 이전 질문과 답변을 통해 확인하실 수 있습니다. 여기서는 DiscountCondition과 다양한 DiscountPolicy 간의 메커니즘을 다루며, 객체지향 설계의 유연성을 설명합니다.
leesy399님 질문에 대한 답이 도움이 되셨기를 바랍니다. 질문이 생길 때마다 언제든지 추가적으로 물어봐 주세요. 강사의 추가적인 설명도 기대하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.