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

qpdlqg님의 프로필 이미지
qpdlqg

작성한 질문수

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

문제와 풀이

문제와풀이2번 출력

작성

·

412

0

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

[질문 내용]
여기에 질문 내용을 남겨주세요.

package poly.expay;

public class PayService{


    public void processPay(String name, int amount) {
        boolean result;
        System.out.println("결제를 시작합니다: " + "option = " + name + ", amount = " + amount);
        if(name.equals("kakao")) {
            KakaoPay kakaoPay = new KakaoPay();
            result = kakaoPay.Pay(amount);
        }
    }
}

다름이 아니라 result값에 kakaoPay.Pay(amount)를 넣는건 알겠는데 그반환값도 true로 되구요 근데 왜 메인에서 출력이 되는건가여? 제가 생각하기로는 result = true라고 생각을 하였는데, 따로 출력을 하기위해선 kakaoPay.Pay(amount); 만 써야 출력이 되지 않나요? 아님 result에 값을 대입함과 동시에 출력도 되는지요.

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. qpdlqg님

생각하는자님께서 잘 말씀해주셨는데요.

kakaoPay.Pay(amount); 를 호출하면 이 메서드가 실행됩니다. 그리고 이 메서드에 있는 내용들이 출력됩니다.

이 메서드의 호출이 끝나면 이 메서드의 호출 결과가 result에 담기게 됩니다.

지금 스택 구조에는 main() -> processPay()가 담겨 있는 상황이고, 여기서 kakaoPay.Pay(amount)를 호출하게 되면 그때는

main() -> processPay() -> Pay(amount)가 호출 됩니다. Pay(amount)의 결과를 반환하면 이때는 main() -> processPay()가 실행중이게 됩니다.

processPay()의 실행이 종료되면 main()으로 돌아갑니다.

감사합니다.

qpdlqg님의 프로필 이미지
qpdlqg
질문자

정말 감사드립니다~~ 이해되었습니다!!

0

이거는 스택 구조를 좀 생각하시면 좋을 것 같습니다. 스택 구조를 기억하시면 실행 영역에서 대기하고 있다가 명령이 종료되면 다음 것을 실행하고, 나중에 가셔야 맨 마지막인 main 메서드가 실행하는것을 생각하시면 답이 풀릴것 같습니다.

qpdlqg님의 프로필 이미지
qpdlqg
질문자

제가 그 부분을 놓쳤던 것 같아요 감사합니다!!

qpdlqg님의 프로필 이미지
qpdlqg

작성한 질문수

질문하기