인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

김영한의 실전 자바 - 기본편

다형성과 설계 예제질문

작성

·

60

·

수정됨

0

스크린샷 2024-09-28 오후 7.16.16.png이 떄 정적메서드이름(findPay) 앞에 인터페이스(Pay)를 왜 써야하는지 이해가 잘 되질않습니다!
Pay를 안쓸 시 오류가 왜 나는지 궁금합니다

답변 2

0

안녕하세요. ywk0619님, 공식 서포터즈 y2gcoder입니다.

해당 질문에 답변을 드리기 위해서 먼저 findPay() 메서드의 목적에 대해서 말씀드리고 싶습니다. findPay() 의 목적은 결제 수단명(option)을 받아서 결제 수단(Pay의 구현체)을 찾는 것입니다. 해당 결제 수

위의 메서드 목적을 인지한 후, findPay() 의 반환 타입을 Pay 로 한 이유에 대해서 설명하기는 쉽습니다. 반환타입을 실제 구현체 중 하나로만 한정한다면, 다른 실제 결제 수단을 반환하지 못하기 때문입니다.

Pay - KakaoPay, NaverPay, DefaultPay 를

결제 수단 - 카카오 페이, 네이버 페이, 기본 결제

로 본다면

결제 수단명으로 결제 수단을 찾는 건데 실제 결제 수단 중 하나만 반환하게 한다면 findPay() 라는 메서드 의 목적과 맞지 않습니다.

이 부분이 이해가 가지 않으신다면 다형성과 설계 챕터의 Driver - Car 의 발전 과정을 다시 한 번 복습해보시면 좋으실 것 같습니다 🙂

 

감사합니다.

0

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

질문에 대해 유사한 질문과 답변을 찾아보았습니다. 아래 링크를 참고해 주세요.

관련 있는 답변 링크:

  1. 다형성 관련해서 질문 드립니다

요약 설명: 정적 메서드를 인터페이스 이름으로 접근해야 하는 이유는, 정적 메서드는 클래스 레벨에서 정의되기 때문에 인스턴스를 생성하지 않고도 클래스 이름을 통해 접근 가능합니다. 여기서 인터페이스를 사용할 수는 없으므로 implement된 클래스의 이름을 사용해야 합니다.

관련 이미지:

  • 정적 메서드 설명 이미지

추가 설명:

정적 메서드(static method)는 인스턴스가 아니라 클래스 자체에 속하기 때문에, 클래스 이름을 통해 직접 접근합니다. PayService 클래스에서 Pay pay = PayStore.findPay(option);와 같이 사용하는 이유는 findPay 메서드가 PayStore 클래스의 정적 메서드로 선언되어 있기 때문입니다. 즉, 해당 메서드를 호출하기 위해 클래스명 PayStore를 사용해야 합니다.

결론

인터페이스는 인스턴스를 생성할 수 없는 추상적인 개념이기 때문에 정적 메서드를 가질 수 없습니다. 따라서 구현 클래스 이름을 사용해야 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

질문의도가 명확히 전달된것같지않아 질문 변경했습니다

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기