Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

우주코딩

인터페이스 정리, Stack 클래스, Stack과 Deque 본문

자바 본 강의

인터페이스 정리, Stack 클래스, Stack과 Deque

우주코딩 2021. 8. 26. 23:11

인터페이스의 유용성을 다시 생각해보기

인터페이스가 없으면 개발자는 자기 마음대로 메서드를 정의한다.
ex) ArrayList - append() , delete(), update()

ex) LinkedList - add(), remove(), set()

목록을 다루기 위해 ArrayList 나 LinkedList 를 사용할 Client 는
각 클래스에 정의된 메서드를 호출해야하는 번거로움이 있다.

 

결론은 클래스의 사용법이 달라서 프로그래밍에 일관성이 없어 불편하다. => ArrayList를 LinkedList로 교체하기 쉽지 않다. 코드를 많이 변경해야한다.

인터페이스를 사용하면 개발자가 클래스를 정의할 때 인터페이스에서 정한 규칙에 따라 만들어야한다. 규칙을 정의한다는 것은 객체 사용법을 정의한다는 것이다.

 

Client 는 ArrayList 와 LinkedList의 사용법이 같기 때문에 프로그래밍에 일관성을 부여한다.
ArrayList를 LinkedList로 교체하더라도 변경해야할 코드가 적다 => 유지보수에 도움이 된다.

구현할 기능에 맞춰 적절한 구현체로 교체하기 쉽다.

Stack 클래스

push() - 스택의 맨 마지막에 값을 추가한다.
pop() - 스택의 맨 마지막에 입력된 값부터 꺼낸다.
peek() - 맨 위의 값을 꺼낸다. 단 pop()과는 달리 제거하지 않는다.
search() - 스택의 맨 위에서부터 해당 값을 찾는다. 위치는 맨 위가 1이다.

Last In First Out 방식으로 데이터를 다룬다.

값이 없는데 pop() 호출하면 EmptyStackException 예외가 발생한다.

Stack과 Deque

Dequeue 인터페이스

  • "Double ended queue" 의 약자이다. 즉 앞, 뒤 모두 양방향에서 값을 넣고 꺼낼 수 있다. 그래서 큐로도 사용할 수 있고 스택으로도 사용할 수 있다.
  • 즉 앞, 뒤 모두 양방향에서 값을 넣고 꺼낼 수 있다.
  • 큐, 스택 둘 다 사용할 수 있도록 queue 와 stack 사용법을 모두 정의한 인터페이스다.

ArrayDeque stack = new ArrayDeque<>();

다음과 같이 스택으로서 사용할 수 있다.
push() - 스택의 맨 마지막에 값을 추가한다.

stack.push("aaa");
stack.push("bbb");
stack.push("ccc");

Stack의 Iterator와 Deque의 Iterator 차이점

Stack의 Iterator

Stack<String> stack = new Stack<>();

// push() - 스택의 맨 마지막에 값을 추가한다.
stack.push("aaa");
stack.push("bbb");
stack.push("ccc");

Iterator<String> iterator = stack.iterator();

while (iterator.hasNext()) {
System.out.println(iterator.next());
}

aaa
bbb
ccc

Deque의 Iterator

Stack 클래스와는 다르게 Deque 구현체의 Iterator는 스택 방식으로 데이터를 꺼낸다.

Iterator<String> iterator = stack.iterator();

while(iterator.hasNext()) {
System.out.println(iterator.next());
}

// Iterator 설계 기법의 목적
// 데이터 조회방식( LIFO, FIFO) 에 상관없이 
// 일관된 방법으로 데이터를 조회할 수 있게 도와준다.
// - 즉 스택처럼 입력 역순으로 꺼내든, 큐처럼 입력순으로 꺼내든 상관없이 개발자는 hasNext(), next() 동일한 메서드를 사용하여 데이터를 조회한다.

ccc
bbb
aaa

결론

  • Iterator 를 통해 데이터를 꺼낼 때 스택의 특성을 그대로 유지하고 싶다면, Stack 클래스 대신 ArrayDeque 클래스를 사용하라.

'자바 본 강의' 카테고리의 다른 글

예외처리하기 Exception  (0) 2021.09.01
List와 Set, HashSet, HashMap  (0) 2021.08.26
람다 문법  (0) 2021.08.25
자바 API : ArrayList에 대해  (0) 2021.08.23
제네릭, 제네릭 레퍼런스, 제네릭 파라미터  (0) 2021.08.23
Comments