ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 DAY23. 매개변수의 결정, 콜렉션과 맵
    기록 2022. 10. 6. 23:00

    매개변수의 결정

    * 값이 1개이면 기본자료형

    * 인자로 전달하는 값들이 하나의 정보를 구성하는 경우, vo객체

    * 값의 개수가 3개이상일 때는 vo객체를 고려해야 하지만, 값이 여러 개이지만 서로 독립적일 때는 기본자료형으로 쓴다.

    * 인자로 전달하는 값이 같은 정보가 여러 개 있는 경우, 콜렉션

    * 반환할 정보가 여러개인데 같은 정보가 아닐 때는, 맵

     

    콜렉션과 맵

    ArrayList<E>

    - 객체를 여러 개 저장할 때 가장 많이 사용되는 자료구조 구현 클래스다.

    - 같은 타입의 객체를 여러 개 저장한다.

    - 내부적으로 index(순번)가 있어서 저장한 순서대로 꺼낼 수 있다.

    - 순서가 보장되는 자료구조 구현 클래스다.

    HashSet<E>

    - 같은 타입의 객체를 여러 개 저장한다.

    - 중복을 허용하지 않는다.

    (동일한 객체 혹은 동등한 객체를 중복해서 저장할 수 없다.)

    * 동등성 비교를 위해서는 hashCodeequals 메소드를 재정의해야 한다.

    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로 모든 객체를 저장할 수 있지만, 조회할 때 강제형변환이 꼭 필요하다.

     

     

    댓글

Designed by Tistory.