기록공간

컬렉션 프레임워크 (Collection Framework) - 1 (stack, queue) 본문

Java

컬렉션 프레임워크 (Collection Framework) - 1 (stack, queue)

입코딩 2020. 9. 16. 22:48
반응형

컬렉션 프레임워크는 컬렉션(모아놓은 데이터들 or 자료 구조)표현조작을 위한 통일된 아키텍처이다. 컬렉션 프로임워크를 구성하는 요소는 다음과 같다.

 

  1. 인터페이스(Interface) : 기본적으로 컬렉션에 필요한 데이터 관리 기능을 제공한다. 예를 들면, List는 추가, 삭제, 검색 기능을 제공하는 컬렉션 인터페이스가 존재한다. 각 컬렉션마다 고유의 인터페이스가 정의되어 있다.

  2. 구현(Implementation) : 인터페이스를 구현한 클래스로 각 컬렉션을 실제 어떤 자료구조를 이용하여 표현했느냐에 따라 컬렉션의 종류가 달라지게 된다.

  3. 알고리즘(Algorithms) : 각 컬렉션들마다 유용하게 사용할 수 있는 메소드를 의미한다.

※ 자바 컬렉션은 견고한 컬렉션 프레임워크 기반 위에 정의되어 있으므로 각 컬렉션 종류마다 제공되는 메소드의 일관성이 있기 때문에 한 가지 컬렉션을 익혀두면 다른 컬렉션을 사용하는데에 용이하다.

 

Stack

Stack 클래스는 오브젝트 후입선출(LIFO : Last In First Out) 구조의 Stack을 나타낸다. 이는 벡터(Vector)를 스택으로 처리하는 5개의 메소드로 Vector 클래스를 확장하게 된다. 

 

제네릭 표현식

Stack<Object> myStack = new Stack<Object>();

Stack 뿐만 아니라 어느 컬렉션 변수를 선언할때에도 이렇게 제네릭 표현식을 붙여줘야 한다. 제네릭 표현식으로 어떤 자료형을 담을 지를 미리 알려주어 데이터의 안정성을 보장해주는 기능을 한다. 

 

Stack의 주요 메서드

- add(E item), push(E item)

Stack<Object> myStack = new Stack<Object>();

String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";

myStack.add(str1); 
myStack.add(str2); 
myStack.push(str3);
myStack.push(str4);

add(), push()는 Stack에 데이터를 추가하는 메서드이다. 

 

- boolean empty()

Stack<Object> myStack = new Stack<Object>();

String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";

myStack.add(str1);

System.out.println(myStack.isEmpty());
//--==>> true

해당 Stack 변수가 비어있는지 알려주는 메서드이다. Stack에 아무런 데이터도 추가되지 않았다면 true 하나라도 존재한다면 false를 반환한다.

 

- E Object peek()  (여기서 E는 Element의 약자)

Stack<Object> myStack = new Stack<Object>();

String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";

myStack.add(str1); 
myStack.add(str2); 
myStack.push(str3);
myStack.push(str4);

String val1 = (String)myStack.peek();
System.out.println(val1);
//--==>> 조영욱

Stack의 맨 마지막에 추가한 객체를 스택에서 제거하지 않고 반환한다. 반환 값은 제네릭 표현식으로 설정한 자료형 타입이다.

 

- E Object pop() 

Stack<Object> myStack = new Stack<Object>();

String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";

myStack.add(str1); 
myStack.add(str2); 
myStack.push(str3);
myStack.push(str4);

String val1 = (String)myStack.push();
System.out.println(val1);
//--==>> 조영욱

String val2 = (String)myStack.push();
System.out.println(val2);
//--==>> 정의진

반환은 위의 peek()과 동작은 같지만 다른 점은 맨 마지막에 추가한 객체를 삭제한다.

 

- int search(Object o)

Stack<Object> myStack = new Stack<Object>();

String str1 = "이준구";
String str2 = "이진주";
String str3 = "정의진";
String str4 = "조영욱";

myStack.add(str1); 
myStack.add(str2); 

int pos = myStack.search(str2);
System.out.println(pos);       
//--==>> 1                     
                                
myStack.push(str3);            
myStack.push(str4);            
                                
pos = myStack.search(str2);    
System.out.println(pos);       
//--==>> 3                     

 스택의 맨 위에서부터 파라미터 값으로 넘겨받은 객체까지의 거리를 정수형으로 반환한다. 만약 객체가 맨뒤에 있다면 1을 반환하고, 그 아래로 내려가면서 1씩 증가한다.

 

Queue

Queue(큐)는 선입선출(FIFO, First In First Out) 구조로 되어있는 Queue이다. 먼저 입력된 자료를 출력하며, Queue 인터페이스를 구현한 클래스는 큐와 관련된 다양한 기능을 제공한다.

※ Queue 인터페이스 인스턴스를 생성하기 위해서는 new 연산자를 이용하여 Queue 인터페이스를 구현한(implements) 클래스의 생성자를 호출한다.

 

Queue의 주요 메서드

- boolean offer(E o)

Queue<Object> myQueue = new LinkedList<Object>();
                                                                                 
String str1 = "이준구";                          
String str2 = "이진주";                          
String str3 = "정의진";                          
String str4 = "조영욱";                          
                                                     
myQueue.offer(str1);                             
myQueue.offer(str2);                             
myQueue.offer(str3);                             
myQueue.offer(str4);                             

지정된 요소를 큐에 삽입한다. 

 

- E element(), peek()

Queue<Object> myQueue = new LinkedList<Object>();
                                                                                 
String str1 = "이준구";                          
String str2 = "이진주";                          
String str3 = "정의진";                          
String str4 = "조영욱";                          
                                                     
myQueue.offer(str1);                             
myQueue.offer(str2);                             
myQueue.offer(str3);                             
myQueue.offer(str4);

System.out.println("값1 : " + (String)myQueue.element());
System.out.println("값2 : " + (String)myQueue.element());
//--==>> 값1 : 이준구
//       값2 : 이준구

System.out.println("값1 : " + (String)myQueue.peek());
System.out.println("값2 : " + (String)myQueue.peek());
//--==>> 값1 : 이준구
//       값2 : 이준구

Queue의 head 요소를 반환하며 삭제하지 않는다. peek() 메서드의 경우 Queue 자료구조가 비어 있는 경우에는 null을 반환한다.

 

- E remove, poll()

Queue<Object> myQueue = new LinkedList<Object>();
                                                                                 
String str1 = "이준구";                          
String str2 = "이진주";                          
String str3 = "정의진";                          
String str4 = "조영욱";                          
                                                     
myQueue.offer(str1);                             
myQueue.offer(str2);                             
myQueue.offer(str3);                             
myQueue.offer(str4);

System.out.println("값1 : " + (String)myQueue.remove());
System.out.println("값2 : " + (String)myQueue.remove());
//--==>> 값1 : 이준구
//       값2 : 이진주

System.out.println("값1 : " + (String)myQueue.poll());
System.out.println("값2 : " + (String)myQueue.poll());
//--==>> 값1 : 정의진
//       값2 : 조영욱

Queue의 head 요소를 반환하고 삭제한다. poll() 메서드의 경우 Queue 자료구조가 비어 있는 경우에는 null을 반환한다.

반응형
Comments