인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Hyunju Lee님의 프로필 이미지
Hyunju Lee

작성한 질문수

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

문제와 풀이

PayStore 예제문제 구체적 설명

작성

·

32

·

수정됨

0

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


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

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

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

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

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

  • static 메서드는 클래스 레벨에서 작동하며, 객체의 인스턴스를 생성하지 않고도 사용할 수 있습니다. 이는 공통적으로 사용되는 유틸리티 메서드나 인스턴스 상태와 무관하게 작동하는 메서드에 적합합니다. PayStore의 경우 결제 수단을 찾는 공통 기능을 제공하며, 인스턴스 상태와 무관하므로 static으로 선언하는 것이 적절합니다.

    2. public static Pay findPay(String option) 에서 static을 사용한 구체적인 이유

    을 알고싶습니다.

답변 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님의 프로필 이미지
Hyunju Lee
질문자

그래도 이해가 안되는데

0

안녕하세요, 인프런 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 메서드 질문

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

Hyunju Lee님의 프로필 이미지
Hyunju Lee

작성한 질문수

질문하기