컬렉션의 개념
컬렉션(Collection)은 집합 이라는 의미로 자바에서는 배열과 자료구조에 관련된 클래스나 인터페이스를 모아놓은 컨테이너 입니다. 7-2의 그림을 보면 여러 인터페이스와 클래스로 나누어져 있는걸 볼 수 있습니다.
제가 처음 이걸 공부했을때 자료구조에 대한 지식이 없어서 이 파트가 이해가 잘 안됐습니다. Collection은 자료구조에 해당하는 부분입니다. 그러므로 자료구조가 선행되어야 비로소 제대로된 이해를 할 수 있습니다. 우선 이런게 있다라고 공부하고 나중에 자료구조와 함께 공부하길 바랍니다.
컬렉션은 제네릭(generics)기법으로 만들어져 있습니다. 제네릭이란 모든 종류의 타입을 다룰 수 있도록 일반화 해놓은 것입니다. 함수를 만들때 매개변수 부분에 int나 String과 같이 타입이 정해져 있으면 이 타입의 변수로만 함수를 불러올 수 있었는데, 매개변수 부분에 뭐가 들어가든 함수가 실행 되도록 하는 것입니다. 물론 같은 함수를 여러개 만들어 매개변수와 이름을 수정하면 되겠지만 불편하겠죠. 이럴때 보면 참 파이썬이 개발시간에 강점이 있다는게 체감 됩니다.
다시 돌아가서 컬렉션은 제네릭으로 만들어져 있는데 Vertor<E> 저 파란부분이 제네릭 입니다. 여기는 반드시 객체만이 가능하며 개발자가 필요한 객체로 바꿔서 사용하면 됩니다. int형으로된 벡터 객체를 만들고 싶다면 Vector<Integer>가 되겠지요. 여기서 E(Element)의 의미는 '여기에 타입을 지정 하세요~' 라는 뜻입니다.
아무튼 컬렉션의 장점은 배열의 크기를 수정할 수 있다는 점입니다. 컬렉션 안의 여러 클래스들을 통해서요.
Vector<E>
배열의 크기를 바꿀수 있습니다. 객체의 삽입, 삭제, 이동이 쉽도록 하는 자료구조 입니다. 벡터는 개발자가 입력한 요소의 개수에 따라 자동으로 배열의 크기를 결정해 주고 수정할때마다 배열의 크기를 줄이거나 늘려줍니다. 자동으로요.
벡터는 Vector<객체> v = new Vector<>(); 형식으로 만들며 뒤에 생성자의 <>에 타입을 지정해 주지 않아도 된다. 이또한 레퍼런스와 객체 생성코드를 분리해 작성할 수 있다.
벡터 클래스의 주요 함수
-요소를 추가해주는 add(몇번째, 무엇을)
-현재 용량을 리턴해주는 capacity()
-인덱스 요소를 리턴해주는 elementAt(몇번째)
-벡터가 비어있는지 알려주는 inEmpty()
-요소 삭제 remove(몇번째)
-사이즈 size(), 지금 용량 capacity()
등이 있다. 더 있는데 필요하면 검색하자.
자동 박싱과 언박싱이 이루어 지지만 솔직히 여기까지 알필요가 있을까..ㅋㅋ 그냥 쓰자.
컬렉션을 매개변수로 받는 메소드도 일전에 배열을 매개변수로 받는 메소드를 만들었을 때와 같이 사용하면 됩니다.
ArrayList<E>
벡터랑 똑같습니다. 하지만 우리는 ArrayList를 주로 사용하는데 이유는 단일스레드만 지원하기 때문에 멀티스레드 동기화를 위한 시간 소모가 없어서 더 빠르기 때문입니다.
** 스레드(thread)란 간단히 말해서 피하기 게임을 할때 여러 물체들이 떨어지죠? main은 전체적인 틀을 유지하는 스레드고 물체들은 스레드를 가지고 각각 실행되는 거라고 이해하면 됩니다.
Interator<E>
요소를 찾을때 사용하는 클래스 입니다. Vector나 ArrayList, LinkedList 등의 요소들을 순차적으로 방문해서 원하는 작동을 하게끔 도와주는 클래스 입니다.
HashMap<K,V>
해시맵은 자료구조에서 중요한 부분을 차지합니다. 자료구조를 공부하면 간단하게나마 구현한 경험이 있을겁니다. Key값으로 Value값을 저장하고 찾는 자료구조 입니다.
해시맵은 List<E>계열 클래스인 Vector 와 ArrayList보다 빠르다는 장점이 있습니다. 또한 찾고자 하는 값이 있을때 Vector나 ArrayList는 반복 통해 찾아야 하는 반면 해시맵은 get메소드를 통해 위치를 바로 찾을 수 있습니다.
put과 get이 가장 많이 쓰는 함수가 됩니다.
LinkedList<E>
처음 공부할때 이해하지 못한 자료구조입니다. 저는 노드개념이 잡히지 않은 상태로 이를 공부해서 하나도 이해하지 못했는데, 대충 배열이지만 앞과 뒤에 뭐가 있는지 아는 배열입니다. 이런게 있다 라고만 알고 넘어가면 될것 같습니다.
외워야 하고 공부해야 할것들이 많다고 생각할수도 있습니다. 하지만 실제로 개발을 더 하다보면 위와같은 것들을 남이 미리 만들어 줘서 사용만 해도 되는것에 편리함을 느끼게 될겁니다! 까먹지만 마시고 억지로 암기할 필요는 없습니다.