inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 중급 2편

컬렉션프레임워크 Stack 관련질문

51

DG Y

작성한 질문수 7

0

package collection.deque.test.stack;

import java.util.ArrayDeque;
import java.util.Deque;

public class BrowserHistory {
    private  Deque<String> history = new ArrayDeque<>();
    private String currentPage = null;

    public void visitPage(String s) {
        if(currentPage != null){
            history.push(currentPage);
        }
        currentPage = s;
        System.out.println("방문 : "+s);
    }

    @Override
    public String toString() {
        return "BrowserHistory{" +
                "stack=" + history +
                '}';
    }

    public String goBack() {

        if(!history.isEmpty()){
            currentPage = history.pop();
            System.out.println("뒤로가기 : "+currentPage);
            return currentPage;
        }
        return null;
    }
}
//////////////////////

package collection.deque.test.stack;

public class BrowserHistoryTest {

    public static void main(String[] args) {
        BrowserHistory browser = new BrowserHistory();
        
        // 사용자가 웹페이지를 방문하는 시나리오
        browser.visitPage("youtube.com");
        browser.visitPage("google.com");
        browser.visitPage("facebook.com");

        // 뒤로 가기 기능을 사용하는 시나리오
        String currentPage1 = browser.goBack();
        System.out.println("currentPage1 = " + currentPage1);

        String currentPage2 = browser.goBack();
        System.out.println("currentPage2 = " + currentPage2);

        System.out.println(browser);


    }

}
위의 goBack 메서드 실행코드가
Pop()인데 
currentPage1 에서 
facebook이 출력이되지않고 google이 출력되는 이유가 궁금합니다
스택구조는  마지막에 입력한것이 나오게 되어있는데 그 전에 입력한것이 왜 나오는 이유가 궁금합니다

java 객체지향 코딩-테스트

답변 1

0

인프런 AI 인턴

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

여러분의 코드를 보면, visitPage 메서드에서는 currentPage를 업데이트하고, 이전 페이지를 history 스택에 push 하고 있습니다. 이 과정에서 실제로는 currentPage에 이미 있는 페이지를 스택에 넣는 구조입니다. 여기서의 핵심은 visitPage 메서드가 호출될 때마다 currentPage의 값이 업데이트되고, 이전 currentPage 값은 스택에 push 된다는 것입니다.

기본적으로 스택의 특성인 LIFO(Last In, First Out) 방식으로 동작하기 때문에, goBack 메서드를 호출할 때마다 가장 최근에 저장된 페이지가 pop 되어 currentPage로 설정됩니다. 따라서, 스택에 저장된 순서는 youtube.com, google.com이고, facebook.comcurrentPage로만 존재합니다. goBack 호출 시 처음으로 facebook.com이 아니라 google.comcurrentPage로 설정되는 이유는 visitPage 메서드가 currentPage만 새로 방문한 페이지로 업데이트하기 때문입니다.

  • visitPage("youtube.com")으로 처음 방문 시:

    • 현재 페이지: youtube.com
    • 스택: 비어있음
  • visitPage("google.com")으로 방문 시, currentPageyoutube.com이 스택에 추가됨:

    • 현재 페이지: google.com
    • 스택: youtube.com
  • visitPage("facebook.com")으로 방문 시, currentPagegoogle.com이 스택에 추가됨:

    • 현재 페이지: facebook.com
    • 스택: youtube.com, google.com

따라서 goBack()가 호출되면 google.com이 pop되어 currentPage로 설정됩니다.

위 내용에 대한 더 자세한 설명이나 코드를 통한 실험의 결과를 원하신다면, 다음 관련 링크를 참고하시면 좋을 것 같습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

제네릭 타입 매개변수 제한과 관련한 문의입니다.

0

80

3

강의가 좀 버겁다 느껴질 때 학습방법 문의

1

135

4

제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T

0

62

1

new T()가 안 되는 니유

0

102

1

안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.

0

98

2

자바 로드맵 선택 질문

0

111

2

실전 자바 중급 - 2편 후 추천 강의

0

176

2

실프로젝트에서 Java25버전 사용

0

121

1

Arrays.sort

0

68

1

블로그 작성 시, 저작권 문제에 대하여

0

166

1

중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.

0

94

3

pop()과 poll()의 차이

0

94

1

특정 index의 노드 조회하기 질문

0

66

2

List.of() 비어있는 불변 리스트 생성

0

81

2

문제2: 개 타입 반환

0

56

2

[리뷰] 중급2편까지 겨우 완강 했습니다.

0

114

2

문제와 풀이1 Ex2와 Ex3

0

65

2

노드 삭제시 노드 null값으로 초기화

0

77

2

강의영상에 대한 질문

0

57

1

타입 매개변수 제한

0

59

1

compareTo

0

68

1

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

0

99

3

섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨

0

70

2

퀴즈 오류 관련 문의

0

109

1