작성
·
43
0
package poly.ex.pay2;
public class PayOption {
Pay findPay(String option) {
//결제 수단 추가시 변경되는 부분.
if (option.equals("kakao")) {
return new KakaoPay();
} else if (option.equals("naver")) {
return new NaverPay();
} else if (option.equals("newPay")) {
return new NewPay();
} else {
return new DefaultPay();
}
}
}마지막 강의 실전 문제 중에서 결제 수단 관련 문제입니다.
위와 같이 코드를 작성하게 되면 결제 수단이 추가될 때마다 클래스 내부 코드가 변경이 되는데, OCP를 위반한 것 같은데, 왜 이렇게 작성한 것인지 궁금해서 여쭤봅니다.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
답변 2
0
안녕하세요. 채월야님, 공식 서포터즈 y2gcoder입니다.
자바 입문 강의의 목표는 자바가 가진 객체지향언어로서의 특징과 법칙을 학습하기 위함이라기 보단, 자바라는 언어와 친숙해지는 강의라고 생각해주시면 좋을 것 같습니다!

그런 의미에서 기본적인 반복문, 조건문, 메서드 등을 학습하는 것을 목적으로 했기 때문에 자바 클래스에 대한 내용도 자세히 나오지 않습니다 🙂
그러한 의미에서 해당 문제에서 OCP 개념까지 도입하는 것은 범위를 넘어간 것이기 때문에 본 강의에서는 학습한 내용을 바탕으로 풀 수 있는 문제, 학습한 내용을 바탕으로 이해할 수 있는 답안을 준비했다고 이해해주시면 감사하겠습니다!
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 채월야님.
질문해주신 내용은 OCP(Open/Closed Principle)와 관련된 부분으로 보입니다. OCP는 객체지향 디자인 원칙 중 하나로, “확장에는 열려 있으나, 변경에는 닫혀 있어야 한다”는 원칙입니다. 이는 새로운 기능을 추가할 때 기존 코드를 수정하지 않도록 장려합니다.
현재 코드에서는 결제 수단이 추가될 때마다 findPay 메서드가 변경되며, 이는 OCP를 위반한다고 말씀하셨습니다. 이런 경우를 해결하기 위해서는 Factory Pattern 또는 Dependency Injection을 사용하여 코드의 결합도를 낮추고, 유연성을 높일 수 있습니다.
해당 코드는 findPay 메서드에서 문자열 option에 따라 각 결제 수단의 객체를 반환합니다. 새로운 결제 수단을 추가할 때마다 조건문과 클래스 인스턴스를 추가로 삽입해야 하기 때문에 코드의 변경이 필요하다는 단점이 있습니다.
public interface PayFactory {
Pay createPay();
}
public class KakaoPayFactory implements PayFactory {
public Pay createPay() {
return new KakaoPay();
}
}
// 각 결제 수단에 대해 Factory를 생성
질문 내용과 관련된 이전 답변들도 참고하시면 도움이 될 것 같습니다. 아래에 유사한 질문과 답변 링크를 포함합니다:
이 링크들은 OCP와 관련된 다양한 사례와 솔루션을 제공합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.