제주 탈출 일지

패스트캠퍼스 챌린지 24일차 본문

패스트캠퍼스 챌린지!

패스트캠퍼스 챌린지 24일차

귀건 2021. 9. 29. 23:30
728x90
반응형

어제 게으름을 만회하느라, 오늘 너무 영향이 가서 적당히 열심히 하겠읍니다.

레스고

 

05. Stack 구현하기

맨 마지막 위치에서만 자료를 추가, 삭제, 꺼냄 

 

이전 ArrayList 활용하여 구현.

 

MyArrayStack 클래스

package ch05;

import ch03.MyArray;

public class MyArrayStack {

	
	MyArray arrayStack;
	int top;
	
	public MyArrayStack() {
		top = 0;
		arrayStack = new MyArray();
	}
	
	public MyArrayStack(int size) {
		top = 0;
		arrayStack = new MyArray(size);
	}
	
	
	public void push(int data) {
		
		if( isFull() ) {
			System.out.println("stack is Full");
			return;
		}
		arrayStack.addElement(data);
		top++;
		
	}
	
	public int pop() {
		
		if( isEmpty() ) {
			System.out.println("stack is empty");
			return MyArray.ERROR_NUM;
			
		}
		return arrayStack.removeElement(--top);
	}
	
	public int peek() {
		
		if( isEmpty() ) {
			System.out.println("stack is empty");
			return MyArray.ERROR_NUM;
			
		}
		return arrayStack.getElement(--top); 
	}
	
	public boolean isEmpty() {
		if( top == 0) {
			return true;
		}
		else return false;
	}
	
	public boolean isFull() {
		
		if ( top == arrayStack.ARRAY_SIZE) {
			return true;
		}
		else return false;
		
	}
	
	public void printAll() {
		arrayStack.printAll(); 
	}
	
	
}

 

MyArrayStackTest 클래스

package ch05;

public class MyArrayStackTest {

	public static void main(String[] args) {
		
		MyArrayStack stack = new MyArrayStack(3);
		stack.push(10);
		stack.push(20);
		stack.push(30);
		stack.push(40);
		
		stack.printAll();
		
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		System.out.println(stack.peek());
		
	}

}

 

 

저번시간에 대충 구현하다 말아서 부랴부랴 getElement 메소드와 printAll 메소드를 구현했다.

내 맘대로 대충 구현한거라 정확한지는 모르겠다;;

결과는 나오니 뭐,,,

 

06. 큐(Queue) 구현하기

맨 앞(front) 에서 자료를 꺼내거나 삭제하고, 맨 뒤(rear)에서 자료를 추가 함

FIFO

 

이전에 만든 연결리스트를 활용함;;;; 

LinkedList Github 소스를 copy & paste 하도록 하겠다.

 

MyLinkedQueue 클래스

package ch06;

import ch04.MyLinkedList;
import ch04.MyListNode;

interface Queue {
	public void enQueue(String data);
	public String deQueue();
	public void printQueue();
}


public class MyLinkedQueue extends MyLinkedList implements Queue {

	MyListNode front;
	MyListNode rear;
	
	@Override
	public void enQueue(String data) {
		// TODO Auto-generated method stub
		
		MyListNode newNode;
		if( isEmpty() ) {
			newNode = addElement(data);
			front = newNode;
			rear = newNode;
			
		}
		else {
			newNode = addElement(data);
			rear = newNode;
		}
		
		System.out.println(newNode.getData() + " added");
	}
	@Override
	public String deQueue() {
		// TODO Auto-generated method stub
		
		if( isEmpty() ) {
			return null;
		}
		String data = front.getData();
		front = front.next;
		
		if(front == null) {
			rear = null;
		}
		
		return data;
	}
	@Override
	public void printQueue() {
		
		printAll();
		
	}
	
	
	
	
}

 

MyListQueueTest 클래스

package ch06;

public class MyListQueueTest {

	public static void main(String[] args) {

		MyLinkedQueue listQueue = new MyLinkedQueue();
		listQueue.enQueue("A");
		listQueue.enQueue("B");
		listQueue.enQueue("C");
		
		listQueue.printAll();
		
		System.out.println(listQueue.deQueue());
		System.out.println(listQueue.deQueue());
		
	}

}

 LinkedList를 상속 + Queue 인터페이스를 상속하여 구현.

 

07. 무엇이든 담을 수 있는 제네릭(Generic) 프로그래밍

제네릭 자료형 정의

클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정 할 수 있도록 선언

(이거 완전 ArrayList 아니냐??!? C++에서 많이 써봤따. 개편함 ㄹㅇ)

컬렉션 프레임워크에서 많이 사용되고 있음

 

<> 다이아몬드 연산자

package ch07;

public class GenericPrinter<T> {
	
	private T material ;

	public T getMaterial() {
		return material;
	}

	public void setMaterial(T material) {
		this.material = material;
	}
	
	public String toString() {
		return material.toString();
	}

}
package ch07;

public class GenericPrinterTest {

	public static void main(String[] args) {
		
		
		Powder powder = new Powder();
		GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
		powderPrinter.setMaterial(powder);
		
		Powder p = powderPrinter.getMaterial();
		System.out.println(powderPrinter.toString());
	}

}

T는 다른 문자로 대체할 수도 있다. (V : Value, K : Key. 등등... )

컴파일러가 컴파일 당시 T를 <> 내부값으로 바꿔준다.

<>를 안쓰면 Object 타입으로 생성된다. -> 나중에 메소드를 사용하려면 명시적 다운캐스팅을 해야됨.

(굳이?)

 

 

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90
반응형
Comments