패스트캠퍼스 챌린지 24일차
어제 게으름을 만회하느라, 오늘 너무 영향이 가서 적당히 열심히 하겠읍니다.
레스고
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 타입으로 생성된다. -> 나중에 메소드를 사용하려면 명시적 다운캐스팅을 해야됨.
(굳이?)
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr