-
학원 DAY23. 매개변수의 결정, 콜렉션과 맵기록 2022. 10. 6. 23:00
매개변수의 결정
* 값이 1개이면 기본자료형
* 인자로 전달하는 값들이 하나의 정보를 구성하는 경우, vo객체
* 값의 개수가 3개이상일 때는 vo객체를 고려해야 하지만, 값이 여러 개이지만 서로 독립적일 때는 기본자료형으로 쓴다.
* 인자로 전달하는 값이 같은 정보가 여러 개 있는 경우, 콜렉션
* 반환할 정보가 여러개인데 같은 정보가 아닐 때는, 맵
콜렉션과 맵
ArrayList<E>
- 객체를 여러 개 저장할 때 가장 많이 사용되는 자료구조 구현 클래스다.
- 같은 타입의 객체를 여러 개 저장한다.
- 내부적으로 index(순번)가 있어서 저장한 순서대로 꺼낼 수 있다.
- 순서가 보장되는 자료구조 구현 클래스다.
HashSet<E>
- 같은 타입의 객체를 여러 개 저장한다.
- 중복을 허용하지 않는다.
(동일한 객체 혹은 동등한 객체를 중복해서 저장할 수 없다.)
* 동등성 비교를 위해서는 hashCode와 equals 메소드를 재정의해야 한다.
TreeSet<E>
- 같은 타입의 객체를 여러 개 저장한다.
- 중복을 허용하지 않는다.
- 객체를 저장하면 내부 정렬된다.
* TreeSet에 저장하는 객체는 반드시 Comparable<E> 인터페이스의 compareTo(E o) 메소드를 재정의해야 한다.
HashMap<E>
- key, value의 쌍으로 저장한다.
- key는 중복을 허용하지 않는다.
- value는 같은 타입 일 수도 있고 다른 타입일 수도 있다.
- 항상 key를 사용해서 key, value 쌍의 정보를 다룬다.
- 정보가 가변적일 때 사용되는 자료구조 구현 클래스다.
맵 Map
- 타입 파라미터가 2개로, key, value의 쌍으로 객체를 저장한다.
- 맵은 서로 짝으로 연결지어 놓았다는 것, 다른 프로그래밍 언어에서는 딕셔너리 객체라고도 함. (키워드와 내용이 짝을 이룸)
- 담는 건 put, 꺼내는 건 get 메소드를 사용한다.
- 맵이 아닌 경우, 구성요소가 달라지면 소스코드 모두 바꿔야 하지만 맵은 그럴 필요 없다. 애초부터 빈 공간에 넣으면 되니까.
- 맵은 Entry라는 저장소가 있다.
- 서로 다른 정보인데 한군데 담고 싶을 때 맵을 사용하고 구분할 때 키를 쓴다. (Set이나 ArrayList는 같은 종류의 값이니까 이름을 붙일 필요가 없지만, map은 다른 종류의 값이니까 이름을 붙인다. key를 통해 원하는 정보를 꺼낼 수 있다.)
- key객체는 중복을 허용하지 않는다. 같은 key객체로 여러 번 저장하면 맨 마지막에 저장된 것만 유지된다.
- vo객체의 대체재로 쓰기도 한다. HashMap은 무겁고 느리지만 가변적이라는 장점과 여러 종류의 다양한 정보를 담을 수 있다.
- 향상된 for문은 쓰지 못한다. key로만 뽑아야 한다.
- 맵의 단점으로, 키를 오타내도 빨간 줄이 안간다. 따라서, key를 다룰 때 조심해야 한다. 타자로 직접 치는 것보다는 ctrl c, ctrl v를 사용하는게 오타로부터 안전하다.
* Map<K, V> 인터페이스
* 주요 메소드
* V put(K key, V value)
* Map객체에 key,value객체의 쌍으로 객체를 저장한다.
* key객체는 중복을 허용하지 않는다. 같은 key객체로 여러번 저장하면 맨 마지막에 저장된 것만 유지된다. (덮어쓰기됨)
* V get(Object key)
* Map객체에서 지정된 key와 쌍으로 저장된 value객체를 반환한다. key가 존재하지 않으면 null을 반환
* boolean containsKey(Object key)
* Map객체에서 지정된 key가 존재하면 true를 반환한다.
* V remove(Object key)
* Map객체에서 지정된 Key를 가진 Entry객체(key객체와 value객체를 포함하고 있다.)가 삭제된다.
* boolean isEmpty()
* Map객체에 Entry객체가 존재하지않으면 true를 반환한다.
* int size()
* Map객체에 저장된 Entry객체의 갯수를 반환한다.
* void clear()
* Map객체에 저장된 모든 Entry객체를 삭제한다.
* Set<K> keySet()
* Map객체의 모든 key객체의 집합을 반환한다.
* Set<Map.Entry<K, V>> entrySet()
* Map객체의 모든 Entry객체의 집합을 반환한다.
* 주요 구현 클래스
* HashMap<K, V>, HashTable<K, V>Messenger는 모든 하위타입의 Messenger를 담을 수 있다.
Messenger를 바라보고 있지만 메소드 재정의로 하위 타입의 send메소드를 사용할 수 있다.
messenger 참조변수는 SmsMessgenger객체, KakaoTalkMessenger, AppMessenger 객체 중에서
Map<String, Messenger>맵객체에서 조회된 Messenger구현객체의 Messenger객체를 참조한다.Map<K,V>에서 V를 Object타입으로 지정하면 Map객체의 Value로 모든 객체를 저장할 수 있지만, 조회할 때 강제형변환이 꼭 필요하다.
'기록' 카테고리의 다른 글
학원 DAY24. 맵 활용하기 (0) 2022.10.08 학원 DAY24. 예외 처리 (0) 2022.10.08 학원 DAY 22. Iterator<E> 인터페이스 (0) 2022.10.06 학원 DAY 21. Collection 컬렉션 (0) 2022.10.05 학원 DAY 21. 제네릭(Generic), comparable인터페이스 (0) 2022.10.04