java자바

Day8(자바 8일차)

woody1505 2021. 2. 16. 01:35

abstract 클래스와 interface의 활용

 

abstract를 이용한 Stack 과 Queue 예제만들기

 

//memory 클래스

public abstract class Memory {
//superclass
	
	protected int []data;//같은패키지내 접근 가능. 프로텍트
	protected int end;
	
	public Memory() {
		data = new int[5];
		end = 0;
	}
	public void push(int num) {
		data[end++] = num;
		
		for(int i = 0; i<5; i++) {
			System.out.print(data[i] + " ");
		}
		System.out.println();
}
	public abstract int pop();//동적바인딩
//Stack 클래스

public class MyStack extends Memory {

	@Override
	public int pop() {
	
	return data[--end];
 }
	
}

//Stack 클래스에서는 쌓인 데이터를 최근것(맨 위 값으로 생각하면 편하다.) 부터 하나씩 빼주는 그림.
//Queue 클래스

public class MyQueue extends Memory {

	private int front;
	
	public MyQueue() {
		front = 0;
	}

	@Override
	public int pop() {
		return data[front++];

	}
}

//Queue는 줄이라는 뜻으로 나열을 한 숫자들에서 맨 앞부터 빠진다고 생각하면 편하다.
//마지막 메인 실행문 


import java.util.Scanner;  //입력을 위해 스케너를 킨다.

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		MyStack ms = new MyStack();
		MyQueue mq = new MyQueue();
		Memory mem = null;
		//생성자
		//while(true)는 무한루프를 일부러 만들기 위해 사용.
		while(true) {
		 System.out.println("1. Stack  2. Queue 3. Exit 를 입력");
		 int num = sc.nextInt();
		
		 if(num == 1) mem = ms;
		 else if(num == 2) mem = mq;
		 else System.exit(-1);//강제종료
		//1,2를 제외한 어떤 숫자를 넣어도 강제종료 된다.
		 while(true) {
		  System.out.println("1. push 2. pop 3. break");
		
		  num = sc.nextInt();
		  if(num == 1) mem.push(sc.nextInt());
		  else if(num == 2) System.out.println(mem.pop());
		  else break;
		}
	}
 }
}
더보기

실행결과

1. Stack  2. Queue 3. Exit 를 입력

1. push 2. pop 3. break

 

(입력 값을 저장함)