[JAVA] Collection & Generic

­Valentine·2021년 12월 24일
0

CS

목록 보기
3/23

CS 공부 1일차는 아니지만 관련 블로그 작성 1일차.. 하루종일 Collection만 했습니다 :(

  • Collection이란?

    • 데이터들을 크기가 정해진 배열의 형식이 아닌 크기가 가변적인 형태로 저장할 수 있는 자료구조입니다. JCF는 이러한 자료구조들을 사용하기 편리하게 Framework를 제공합니다. JCF의 세부 인터페이스로는 BeanContext, BeanContextServices, BlockingDeque, BlockingQueue, Deque, EventSet, List, NavigableSet, Queue, Set, SortedSet, TransferQueue이 있으며 Set, Queue, List의 3가지 종류가 많이 사용됩니다.(Java SE 15 기준) Map 또한 Collection을 상속받지는 않으나 Collection으로 취급합니다.
  • Set이란?

    • Set 인터페이스를 상속받은 클래스들은 AbstractSet, ConcurrentHashMap.KeySetView, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet가 있으며 HashSet TreeSet, LinkedHashSet이 많이 사용됩니다. Set 인터페이스는 흔히 아는 집합과 같이 저장할 때 순서(index)가 기록되지 않기 때문에 전부 불러오려면 iterator를 사용해야 하는 특징이 있습니다. 또한 중복을 허용하지 않아서 코딩테스트때에 많이 활용하는 자료구조 입니다.
  • Queue는?

    • Queue의 세부 인터페이스들은 BlockingDeque, BlockingQueue, Deque, TransferQueue가 있습니다. 이를 상속받은 class들은 AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, SynchronousQueue가 있으며 LinkedList, Priority Queue가 많이 사용됩니다. FIFO의 형태를 가져서 먼저 들어온 것이 먼저 나갑니다.
  • List는?

    • List 인터페이스를 상속받은 클래스들은 AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector가 있으며 ArrayList, LinkedList, Vector가 많이 사용됩니다. Set과는 다르게 중복을 허용하고 순서가 기록됩니다. 이중에서 ArrayList와 Vector가 유사한 역할을 하는데 멀티스레드 환경이 아니면 ArrayList를 사용하는 것이 권장됩니다.
  • Map은?

    • Map 인터페이스를 상속받은 클래스들은 AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, Headers, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap이 있으며 HashMap, TreeMap이 많이 사용됩니다. Key와 Value값을 갖는 것이 가장 큰 특징이며 Key의 중복은 허용하지 않지만 Value의 중복은 허용합니다.
  • 그럼 Generic이란?

    • JDK 1.5부터 도입된 개념으로 클래스나 메소드를 generic type을 이용하여 선언하는 기법입니다. Collection 중에 ArrayList를 선언한다고 가정해 봅시다.

      ArrayList<E> al = new ArrayList<>();
      

      이때 위의 코드의 E 부분이 generic type(타입 매개변수)입니다. E 자리에 Integer와 같은 Wrapper Class나 String을 지정해주어 Integer만 넣을 수 있는 자료구조 등으로 활용할 수 있습니다. 이를 구체화시키기 이전에 일반화 시킨다는 의미로 generic type이라고 부릅니다.

  • 위의 Wrapper Class란?

    • Class이름이 Wrapper인 것은 아니지만 int, char 등의 기본 타입을 객체로 다루기 위해서 만든 클래스들을 Wrapper Class라고 부릅니다. Byte, Short, Integer, Long, Character, Double, Float, Boolean의 8가지로 이루어져 있습니다. 기본 타입들과 AutoBoxing과 AutoUnBoxing이 가능합니다.
  • AutoBoxing은?

    • 박싱과 언박싱은 아래의 코드와 같은 상황에서 자동으로 이루어집니다.
      Integer num = 3;
      int n = num;
      첫 번째 줄의 코드는 num이 Integer.valueOf(3);으로 자동으로 변환되고 두 번째 줄의 코드는 n이 num.intValue();로 자동으로 변환됩니다.
profile
천체관측이 취미

0개의 댓글