작성
·
13
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이 출력되는 이유가 궁금합니다
스택구조는 마지막에 입력한것이 나오게 되어있는데 그 전에 입력한것이 왜 나오는 이유가 궁금합니다
답변 1
0
안녕하세요, 인프런 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.com
은 currentPage
로만 존재합니다. goBack
호출 시 처음으로 facebook.com
이 아니라 google.com
이 currentPage
로 설정되는 이유는 visitPage
메서드가 currentPage
만 새로 방문한 페이지로 업데이트하기 때문입니다.
visitPage("youtube.com")
으로 처음 방문 시:
youtube.com
visitPage("google.com")
으로 방문 시, currentPage
인 youtube.com
이 스택에 추가됨:
google.com
youtube.com
visitPage("facebook.com")
으로 방문 시, currentPage
인 google.com
이 스택에 추가됨:
facebook.com
youtube.com, google.com
따라서 goBack()
가 호출되면 google.com
이 pop되어 currentPage
로 설정됩니다.
위 내용에 대한 더 자세한 설명이나 코드를 통한 실험의 결과를 원하신다면, 다음 관련 링크를 참고하시면 좋을 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.