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
(입력 값을 저장함)