inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

문제와 풀이

PayStore 예제문제 구체적 설명

146

Hyunju Lee

작성한 질문수 7

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
예제문제에 작성한 PayStore 코드에서

1. public abstract class PayStore 에서 abstract를 사용한 구체적인 이유

다른질문답변을 봤는데도 이해가 잘 안갑니다 더 구체적으로 설명해주세요
예시답변>정적 메서드(static method) 사용 이유:

java 객체지향

답변 3

0

김영한

안녕하세요. Hyunju Lee님

자바에서 클래스가 기능을 제공할 때 2가지 방법을 사용할 수 있습니다.

  1. 인스턴스 생성을 통해서 제공

  2. 인스턴스 생성 없이 static 메서드만 제공

특정 클래스의 각각의 인스턴스가 속성이 달라서 인스턴스를 생성해야 한다면 1번 방법이 좋겠지만, 지금과 같이 속성이 없고 단순히 기능 하나만 제공한다면 2번과 같은 방법도 괜찮습니다.

여기서 사용한 PayStore는 실제 사용하는 결제 수단만 제공하는 역할을 담당합니다. 이 클래스는 속성(필드)가 없기 때문에 여러 인스턴스를 만들어도 의미가 없습니다. 따라서 인스턴스로 만들 필요 없이 단순히 findPay라는 메서드 하나만 제공하면 됩니다.

쉽게 풀어서 설명하자면 예를 들어서 new PayStore()로 객체를 여러번 생성하면 의미 없는 인스턴스가 생성될 수 있습니다.

PayStore payStore1 = new PayStore();
PayStore payStore2 = new PayStore();
PayStore payStore3 = new PayStore();

이렇게 인스턴스를 생성해도 payStore1 ~ 3이 모두 같은 역할을 담당합니다. 결과적으로 메모리만 낭비되는 것입니다.

자바에서는 문법상 new를 통한 객체 생성을 기본적으로 막을 수 없습니다. 이것을 막으려면 abstract 를 사용하거나 또는 생성자를 private으로 막으면 됩니다.

인스턴스가 필요없는 기능을 제대로 제공하기 위해 이렇게 객체를 생성하지 못하게 막아서 개발자의 실수를 막고 static 메서드를 통해 단 하나의 기능을 제공하는 것입니다.

감사합니다.

 

0

Hyunju Lee

그래도 이해가 안되는데

0

인프런 AI 인턴

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

질문하신 PayStore 코드의 abstractstatic 사용에 대한 이유에 대해 설명드리겠습니다. 이러한 질문에 대한 유사한 질문과 답변을 제공한 링크도 포함하였으니 함께 참고해 주세요.

1. public abstract class PayStore에서 abstract 사용 이유

abstract 키워드는 PayStore 클래스에서 객체 생성이 아닌 구조(템플릿)를 제공하는 목적으로 사용됩니다. PayStore 클래스 자체로는 인스턴스를 생성하지 않도록 하기 위해 사용됩니다. 즉, PayStore는 결제 수단을 관리하거나 찾는 고유의 로직을 제공하기보다는 이를 서브클래스들이 구체적으로 구현하게 만들어 유지보수성과 확장성이 높아집니다.

자세한 내용은 아래의 유사 질문을 참고 바랍니다:
- 서비스 로직에 대해서 궁금한게 있습니다
- 다형성과 설계 예제질문

2. public static Pay findPay(String option)에서 static 사용 이유

static 키워드는 인스턴스화 없이 클래스 레벨에서 메서드를 사용할 수 있게 합니다. findPay 메서드는 특정 결제 수단을 찾는 로직으로, 인스턴스가 필요 없으며 클래스 이름으로 직접 호출이 가능하죠. 이렇게 함으로써 인스턴스를 만들어 관리하지 않아도 되는 단순한 로직 처리에 있어서 코드의 가독성과 효율성을 높일 수 있습니다.

유사한 질문 링크:
- 이부분이 이해가 안갑니다
- static 메서드 질문

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

질문있습니다

0

22

1

1번 문제 질문입니다.

0

28

1

음악플레이어 문제 중 코드질문

0

22

1

9장 상속 문제와 풀이 질문

0

35

1

강의 자료에 사소한 오타가 있습니다.

0

46

2

매서드 참조값 반환??

0

63

1

접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드

0

66

1

자바 기본편 - .(dot)에 관한 질문입니다!

0

83

1

공부방법

0

72

2

상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?

0

79

1

static method 질문

0

62

1

캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요

0

93

1

Method1에서 Student 객체

0

71

1

3강 18. null 질문

0

65

1

this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?

0

73

1

팩토리 메서드 패턴과 일반 생성자 사용의 장단점

0

95

1

문의

0

102

1

9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다

0

86

1

상속과 그에 따른 메모리 구조 질문

0

59

1

call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다

0

72

1

수강기한

0

133

1

기본편 객체지향 프로그래밍에 대한 정의

0

84

1

섹션10 상속 메모리 구조 및 문제 관련 질문

0

85

1

추가 지식 학습

0

150

2