본문으로 바로가기

(Java)동적바인딩 예제

category Java/eclipse 연습 2020. 8. 11. 13:58
public abstract class MyMemory {

	protected int []arr;
	protected int pos;
	
	public MyMemory() {
		this(5);	// 배열 길이를 안정해주면 5
	}
	public MyMemory(int num) {
		arr = new int[num];	// 배열 생성
		pos = 0;	// 배열 위치
	}
	
	public void push(int data) {
		arr[pos++] = data;	// arr[0]에 값을 넣고 후에 1증가
	}
	
	public abstract int pop();	// 추상메소드 생성
}
public class MyStack extends MyMemory{

	@Override
	public int pop() {
		return arr[--pos];	// 값을 1 빼고 리턴
	}
}
public class MyQueue extends MyMemory {

	private int front;
	
	public MyQueue() {
		front = 0;	// 시작 값을 구하기 위한 변수
	}
	
	@Override
	public int pop() {
		return arr[front++];	// arr[0] 출력 후 1증가
	}
}
import java.util.Scanner;

public class MainExam {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		MyStack ms = new MyStack();
		MyQueue mq = new MyQueue();
		MyMemory mm = null;

		do {
			System.out.println("1.Stack 2.Queue 3.Exit =>");
			int num = sc.nextInt();
			// 동적바인딩 선택
			if (num == 1) {
				mm = ms;	// MyMemory = MyStack
			} else if (num == 2)
				mm = mq;	// MyMemory = MyQueue
			else
				break;

			// 활용
			while (true) {
				System.out.println("1.push 2.pop 3.back => ");
				int num1 = sc.nextInt();

				if (num1 == 1)
					mm.push(sc.nextInt());	// 입력 값을 Stack or Queue에 넣음
				else if (num1 == 2)
					System.out.println(mm.pop());
				else
					break;
			}
		} while (true);
	}
}
반응형