1. Stack
: 후입선출(LIFO :Last In First Out)
A. 자료 입력
- push(입력값)
B. 자료 출력
- pop() : 자료를 꺼내온 후 꺼내온 자료를 Stack에서 삭제한다.
- peek() : 삭제없이 자료를 꺼내온다.
C. 코드
public class StackQueueTest {
	public static void main(String[] args) {
    
		Stack<String> stack = new Stack<>();
		stack.push("홍길동");
		stack.push("일지매");
		stack.push("성춘향");
		stack.push("변학도");
		System.out.println("현재 stack ==> " + stack);
		System.out.println();
		
		String data = stack.pop();
		System.out.println("꺼내온 값 : " + data);
		System.out.println("꺼내온 값 : " + stack.pop());
		System.out.println("현재 stack ==> " + stack);
		
		stack.push("강감찬");
		System.out.println("현재 stack ==> " + stack);
		
		System.out.println("꺼내온 값 : " + stack.pop());
		System.out.println("현재 stack ==> " + stack);
		
		System.out.println("삭제없이 꺼내온 값 : " + stack.peek());
		System.out.println("현재 stack ==> " + stack);
	}
}

2. Queue
: 선입선출(FIFO : First In First Out)
A. 자료 입력
- offer(입력값)
B. 자료 출력
- poll() : 자료를 꺼내오고 꺼내온 자료를 Queue에서 삭제한다.
- peek() : 삭제없이 자료를 꺼내온다.
*Queue는 LinkedList를 이용해서 사용할 수 있다.
C. 코드
public class StackQueueTest {
	public static void main(String[] args) {
    
		Queue<String> queue = new LinkedList<>();
		queue.offer("홍길동");
		queue.offer("일지매");
		queue.offer("성춘향");
		queue.offer("변학도");
		
		System.out.println("현재 Queue ==> " + queue);
		System.out.println();
		
		String temp = queue.poll();
		System.out.println("꺼내온 값 : " + temp);
		System.out.println("꺼내온 값 : " + queue.poll());
		
		System.out.println("현재 Queue ==> " + queue);
		queue.offer("강감찬");
		System.out.println("현재 Queue ==> " + queue);
		
		System.out.println("꺼내온 값 : " + queue.poll());
		System.out.println("현재 Queue ==> " + queue);
		
		System.out.println("삭제없이 꺼내온 값 : " + queue.peek());
		System.out.println("현재 queue ==> " + queue);	
	}
}

3. StackTest
A. Browser 클래스
// 웹브라우저의 앞으로 가기, 뒤로 가기 기능 구현하기 (스택 이용)
class Browser{
	private Stack<String> back;		// 이전 방문 내역이 저장될 스택
	private Stack<String> forward;	// 다음 방문 내역이 저장될 스택
	private String currentURL;
	
	public Browser() {
		back = new Stack<>();
		forward = new Stack<>();
		currentURL = "";
	}
	
	// 사이트를 방문하는 메서드 ==> 매개변수에는 방문할 URL이 저장된다.
	public void goURL(String url) {
		System.out.println(url + "사이트로 이동합니다.");
		
		if(currentURL != null && !"".equals(currentURL)) {	// 현재 페이지가 있으면
			back.push(currentURL);	// 현재 페이지를 back 스택에 추가한다.
		}
		currentURL = url;	// 현재 페이지를 이동할 페이지로 변경한다.
		forward.clear();	// forward 스택 비우기
	}
	
	// 뒤로 가기 메서드
	public void goBack() {
		// isEmptu() ==> 컬렉션이 비었는지 여부를 검사하는 메서드
		if (!back.isEmpty()) {	// back 스택이 비어있지 않으면
			forward.push(currentURL);	// 현재 페이지를 forward 스택에 추가한다.
			currentURL = back.pop();	// back 스택에서 꺼내온 데이터를 현재 페이지로 한다. 
		}
	}
	
	// 앞으로 가기 메서드
	public void goForward() {
		if (!forward.isEmpty()) {	// forward 스택이 비어있지 않으면
			back.push(currentURL);	// 현재 페이지를 back 스택에 추가한다.
			currentURL = forward.pop();	// forward 스택에서 꺼내온 데이터를 현재 페이지로 한다.
		}
	}
	
	// 방문 기록 확인하는 메서드
	public void history() {
		System.out.println();
		System.out.println("\t방 문 기 록");
		System.out.println("----------------------");
		System.out.println("back		=> " + back);
		System.out.println("현재		=> " + currentURL);
		System.out.println("forward		=> " + forward);
		System.out.println("----------------------");
		System.out.println();
	}
}
B. main 메서드
Browser b = new Browser();
b.history();

b.goURL("1. 네이버");
b.history();

b.goURL("2. 구글");
b.history();

b.goURL("3. 다음");
b.goURL("4. 네이트");
b.history();

System.out.println("뒤로가기 후...");
b.goBack();
b.history();

System.out.println("뒤로가기 후...");
b.goBack();
b.history();

System.out.println("앞으로 가기 후...");
b.goForward();
b.history();

System.out.println("새로운 사이트로 접속한 후...");
b.goURL("5. DDIT");
b.history();

C. 전체 코드
package kr.or.ddit.basic;
import java.util.Stack;
public class StackTest {
	public static void main(String[] args) {
		Browser b = new Browser();
		
		b.history();
		b.goURL("1. 네이버");
		b.history();
		
		b.goURL("2. 구글");
		b.history();
		
		b.goURL("3. 다음");
		b.goURL("4. 네이트");
		b.history();
		
		System.out.println("뒤로가기 후...");
		b.goBack();
		b.history();
		
		System.out.println("뒤로가기 후...");
		b.goBack();
		b.history();
		
		System.out.println("앞으로 가기 후...");
		b.goForward();
		b.history();
		
		System.out.println("새로운 사이트로 접속한 후...");
		b.goURL("5. DDIT");
		b.history();
	}
}
// 웹브라우저의 앞으로 가기, 뒤로 가기 기능 구현하기 (스택 이용)
class Browser{
	private Stack<String> back;		// 이전 방문 내역이 저장될 스택
	private Stack<String> forward;	// 다음 방문 내역이 저장될 스택
	private String currentURL;
	
	public Browser() {
		back = new Stack<>();
		forward = new Stack<>();
		currentURL = "";
	}
	
	// 사이트를 방문하는 메서드 ==> 매개변수에는 방문할 URL이 저장된다.
	public void goURL(String url) {
		System.out.println(url + "사이트로 이동합니다.");
		
		if(currentURL != null && !"".equals(currentURL)) {	// 현재 페이지가 있으면
			back.push(currentURL);	// 현재 페이지를 back 스택에 추가한다.
		}
		currentURL = url;	// 현재 페이지를 이동할 페이지로 변경한다.
		forward.clear();	// forward 스택 비우기
	}
	
	// 뒤로 가기 메서드
	public void goBack() {
		// isEmptu() ==> 컬렉션이 비었는지 여부를 검사하는 메서드
		if (!back.isEmpty()) {	// back 스택이 비어있지 않으면
			forward.push(currentURL);	// 현재 페이지를 forward 스택에 추가한다.
			currentURL = back.pop();	// back 스택에서 꺼내온 데이터를 현재 페이지로 한다. 
		}
	}
	
	// 앞으로 가기 메서드
	public void goForward() {
		if (!forward.isEmpty()) {	// forward 스택이 비어있지 않으면
			back.push(currentURL);	// 현재 페이지를 back 스택에 추가한다.
			currentURL = forward.pop();	// forward 스택에서 꺼내온 데이터를 현재 페이지로 한다.
		}
	}
	
	// 방문 기록 확인하는 메서드
	public void history() {
		System.out.println();
		System.out.println("\t방 문 기 록");
		System.out.println("----------------------");
		System.out.println("back		=> " + back);
		System.out.println("현재		=> " + currentURL);
		System.out.println("forward		=> " + forward);
		System.out.println("----------------------");
		System.out.println();
	}
}'Java' 카테고리의 다른 글
| [고급자바] 정렬(Comparator, Comparable) (0) | 2023.03.03 | 
|---|---|
| [고급자바] Set, Ilterator (1) | 2023.03.02 | 
| [고급자바] ArrayList 문제 (0) | 2023.03.01 | 
| [고급자바] Collection(List) (0) | 2023.03.01 | 
| [고급자바] Collection(Vector) (0) | 2023.03.01 |