작성
·
42
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님.
질문하신 내용은 메서드의 반환 타입과 다형성에 관련된 부분입니다. 이미 유사한 질문이 여러 개 있습니다.
유사한 질문과 답변이 제공된 링크를 아래에 포함합니다.
풍부한 설명 추가:
다형성과 반환 타입:
public static Pay findPay(String option)
에서 Pay
는 반환 타입을 의미합니다. 해당 메서드는 다양한 Pay
타입 객체(KakaoPay
, NaverPay
, NewPay
, DefaltPay
)를 반환할 수 있으며, 이들 모두 Pay
타입을 구현하거나 상속하고 있습니다. 따라서 findPay
의 반환 타입으로 Pay
를 사용하면 다형성을 활용하여 동일한 메서드 호출로 서로 다른 객체를 처리할 수 있습니다.
사용하지 않을 시 오류 발생:
만약 메서드의 반환 타입을 지정하지 않으면, 컴파일러는 반환되는 객체가 무엇인지 알 수 없어 오류가 발생합니다. 반환 타입을 지정함으로써 메서드가 어떠한 타입의 객체를 반환하는지 명시적으로 알리게 되어, 호출부에서 해당 객체를 받을 때 타입 불일치 문제를 방지할 수 있습니다.
예시 코드 설명:
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
메서드를 호출할 때 해당 객체를 받아서 사용할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.