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

ywk0619님의 프로필 이미지
ywk0619

작성한 질문수

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

다형성예제2 질문

작성

·

36

0

package poly.ex.pay1;

 

//추상클래스로 선언해 객체 생성을 막음

public abstract class PayStore  {

 

    //변하는 부분n

    public static  Pay findPay(String option){

        if (option.equals("kakao")) {

            return new KakaoPay();

        } else if (option.equals("naver")) {

            return new NaverPay();

        }else if (option.equals("New")) {

                return new NewPay();

            }

         else {

            return new DefaltPay();

        }

 

    }

}

 

이때 findpay(정적메서드 명) 앞에 왜 Pay(인터페이스명) 을 사용했는지 궁금합니다

또한 사용안할 시 오류가발생되는 원인이궁금합니다

답변 2

0

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

Pay(인터페이스명)을 반환타입으로 사용하여 다양한 케이스의 반환타입을 제공하기 위함입니다.

Pay를 사용하지 안할 시 오류가 발생된다고 하신 내용은 다양하게 해석될 수 있습니다.

 

아래 내용을 참고해주세요.

설명이 더 필요하시다면 질문을 조금 더 구체적으로 남겨주시면 추가 도움드릴 수 있을 것 같습니다.

 

(1) Pay를 제거한 경우:

자바의 문법에서 메서드의 반환타입을 지정해주어야합니다.

 

public static  findPay(String option){

 

(2) Pay대신 void로 지정한 경우 :

void는 반환타입이 없을 때 사용합니다.

메서드에 return을 지정했을 시에는 void 대신 return 뒤에 나오는 대상의 타입에 맞추어야 합니다.

 

public static void findPay(String option){

 

(3) Pay대신 특정 구현 클래스의 타입을 지정한 경우 :

다양한 반환타입을 제공하기 위해 KaKaoPay와 같이 구체적인 클래스 타입이 아닌 인터페이스인 Pay로 반환 타입을 지정해야합니다.

 

public static  KaKaoPay findPay(String option){

        if (option.equals("kakao")) {

            return new KakaoPay();

        } else if (option.equals("naver")) {

            return new NaverPay();

        }else if (option.equals("New")) {

                return new NewPay();

            }

         else {

            return new DefaltPay();

        }

 

감사합니다.

0

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

질문하신 내용은 메서드의 반환 타입과 다형성에 관련된 부분입니다. 이미 유사한 질문이 여러 개 있습니다.

유사한 질문과 답변이 제공된 링크를 아래에 포함합니다.

유사한 질문과 답변:

  1. 이부분이 이해가 안갑니다

  2. 서비스 로직에 대해서 궁금한게 있습니다

  3. 회원 도메인 실행과 테스트 강의 8분 40초 질문입니다

풍부한 설명 추가:

  1. 다형성과 반환 타입:
    public static Pay findPay(String option)에서 Pay는 반환 타입을 의미합니다. 해당 메서드는 다양한 Pay 타입 객체(KakaoPay, NaverPay, NewPay, DefaltPay)를 반환할 수 있으며, 이들 모두 Pay 타입을 구현하거나 상속하고 있습니다. 따라서 findPay의 반환 타입으로 Pay를 사용하면 다형성을 활용하여 동일한 메서드 호출로 서로 다른 객체를 처리할 수 있습니다.

  2. 사용하지 않을 시 오류 발생:
    만약 메서드의 반환 타입을 지정하지 않으면, 컴파일러는 반환되는 객체가 무엇인지 알 수 없어 오류가 발생합니다. 반환 타입을 지정함으로써 메서드가 어떠한 타입의 객체를 반환하는지 명시적으로 알리게 되어, 호출부에서 해당 객체를 받을 때 타입 불일치 문제를 방지할 수 있습니다.

예시 코드 설명:

public static Pay findPay(String option) {
    if (option.equals("kakao")) {
        return new KakaoPay();
    } else if (option.equals("naver")) {
        return new NaverPay();
    } else if (option.equals("New")) {
        return new NewPay();
    } else {
        return new DefaltPay();
    }
}

위 코드에서 findPay 메서드는 Pay 인터페이스를 구현한 다양한 클래스의 객체를 반환합니다. 반환 타입을 Pay로 지정함으로써 findPay 메서드를 호출할 때 해당 객체를 받아서 사용할 수 있습니다.

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

ywk0619님의 프로필 이미지
ywk0619

작성한 질문수

질문하기