ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 컬렉션 프레임워크 - LIFO와 FIFO 컬렉션
    CSE/Java 2015. 9. 19. 16:21


    컬렉션 프레임 워크는 여러 절로 구성되어 있습니다.



    Intro

    List 컬렉션

    Set 컬렉션

    Map 컬렉션

    검색 기능을 강화시킨 컬렉션

    LIFO와 FIFO 컬렉션

    동기화 & 병렬처리를 위한 컬렉션






    후입선출(LIFO: Last In First Out)은 나중에 넣은 객체가 먼저 빠져나가는 자료구조를 말합니다.


    반대로 선입선출(FIFO: First In First Out)은 먼저 넣은 객체가 먼저 빠져나가는 구조를 말합니다.


    컬렉션 프레임워크에는 LIFO 자료구조를 제공하는 스택(Stack) 클래스와 FIFO 자료구조를 제공하는 큐(Queue) 인터페이스를 제공하고 있습니다.


    스택(Stack)을 응용한 대표적인 예가 JVM 스택 메모리입니다. 스택 메모리에 저장된 변수는 나중에 저장된 것부터 제거됩니다.


    큐(Queue)를 응용한 대표적인 예가 스레드풀(ExecutorService)의 작업 큐입니다. 작업 큐는 먼저 들어온 작업부터 처리합니다.





    1 Stack

      Stack 클래스는 LIFO 자료구조를 구현한 클래스입니다. 다음은 Stack 클래스의 주요 메소드들입니다.



     





      Stack 객체를 생성하기 위해서는 저장할 객체 타입을 파라미터로 표기하고 기본 생성자를 호출하면 됩니다.










     * Coin.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    package set;
     
    public class Coin {
        private int value;
     
        public Coin(int value) {
            super();
            this.value = value;
        }
     
        public int getValue() {
            return value;
        }
     
        public void setValue(int value) {
            this.value = value;
        }
     
    }
     
    cs






     * StackExam.java


    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
    package set;
     
    import java.util.Stack;
     
    public class StackExam {
     
        public static void main(String[] args) {
            Stack<Coin> stack = new Stack<Coin>();
     
            stack.push(new Coin(100));
            stack.push(new Coin(50));
            stack.push(new Coin(500));
            stack.push(new Coin(100));
            stack.push(new Coin(50));
            stack.push(new Coin(50));
            stack.push(new Coin(500));
     
            while (!stack.isEmpty()) {
                Coin coin = stack.pop();
                System.out.println("꺼낸 동전: " + coin.getValue() + " 원");
            }
        }
     
    }
     
    cs















    2 Queue

      Queue 인터페이스는 FIFO 자료구조에서 사용되는 메소드를 정의하고 있습니다. 다음은 Queue 인터페이스에 정의되어 있는 메소드들입니다.








      Queue 인터페이스를 구현한 대표적인 클래스는 LinkedList입니다.


      LinkedList 는 List 인터페이스를 구현했기 때문에 List 컬렉션이기도 합니다.


      다음 코드는 LinkedList 객체를 Queue 인터페이스 타입으로 변환한 것입니다.
















      다음은 Queue를 이용해서 간단한 메시지 큐를 구현한 예제입니다. 먼저 넣은 메시지가 반대쪽으로 먼저 나오기 때문에 넣은 순서대로 메시지가 처리됩니다.



     * Message.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    package set;
     
    public class Message {
        public String command;
        public String to;
     
        public Message(String command, String to) {
            super();
            this.command = command;
            this.to = to;
        }
     
    }
     
    cs




     * QueueExam.java


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    package set;
     
    import java.util.LinkedList;
    import java.util.Queue;
     
    public class QueueExam {
     
        public static void main(String[] args) {
            Queue<Message> queue = new LinkedList<Message>();
     
            queue.offer(new Message("sendMail""Jack"));
            queue.offer(new Message("sendSMS""Maggie"));
            queue.offer(new Message("sendKakaotalk""Blue"));
            queue.offer(new Message("sendLine""Jack"));
     
            while (!queue.isEmpty()) {
                Message msg = queue.poll();
     
                switch (msg.command) {
                case "sendMail":
                    System.out.println(msg.to + " 님께 메일을 보냅니다");
                    break;
     
                case "sendSMS":
                    System.out.println(msg.to + " 님께 문자를 보냅니다");
                    break;
     
                case "sendKakaotalk":
                    System.out.println(msg.to + " 님께 카톡을 보냅니다");
                    break;
     
                case "sendLine":
                    System.out.println(msg.to + " 님께 라인을 보냅니다");
                    break;
                }
            }
        }
     
    }
     
    cs












      * 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.

    댓글

Designed by Tistory.