[면접스터디] 자바 3주차 - 컬렉션 심화 (15~17)

동춘·2024년 11월 12일

[면접스터디] 자바

목록 보기
9/15

Map 인터페이스는 왜 Collection 인터페이스에 상속을 받지 않았나요?

두 인터페이스의 데이터 구조와 개념이 서로 다르기 때문입니다.

  • 데이터 구조의 차이

    • Collection: List, Set, Queue와 같은 Collection 인터페이스의 하위 클래스는 객체의 그룹을 단일 값으로 다룹니다. 데이터는 단일 요소(element)로 구성되며, 추가된 순서, 중복 허용 여부 등에 따라 각각의 Collection 구현이 다르게 동작합니다.
    • Map: Map 인터페이스는 키-값 쌍(key-value pair)을 저장하는 방식으로 설계되었습니다. Map에서는 하나의 key가 특정 value와 연결되며, key는 중복될 수 없습니다. Map을 이용해 데이터를 저장하고 검색할 때 key를 사용해 빠르게 값을 찾을 수 있습니다.
  • 중복 요소에 대한 처리

    • Collection: Set을 제외한 대부분의 Collection 구현에서는 중복된 요소를 허용하며, 중복된 데이터를 쉽게 추가할 수 있습니다.
    • Map: Map에서는 키는 중복될 수 없으며, 같은 key가 추가되면 기존의 값이 새로운 값으로 덮어쓰여집니다.
  • 요소의 접근 방식

    • Collection: Collection은 각 요소를 개별적으로 다루며, 인덱스나 순회(iterator)를 통해 데이터에 접근할 수 있습니다.
    • Map: Map은 키를 통해 값에 접근하며, keySet(), values(), entrySet() 등의 메서드를 통해 키, 값, 또는 Map.Entry를 사용하여 키-값 쌍을 순회할 수 있습니다. Map은 이러한 Collection 접근 방식을 따르지 않고, 키 기반 조회가 핵심입니다.
  • 메서드의 불일치

    • Collection 인터페이스의 메서드는 단일 요소 관리를 기반으로 합니다(예: add, remove, contains 등).
    • Map 인터페이스는 키-값 쌍을 다루기 위한 메서드가 필요합니다(예: put, get, remove 등). 따라서 Collection 인터페이스의 메서드와는 목적이 다르며, Map은 이러한 단일 요소 기반의 메서드를 사용할 수 없습니다.

      Map은 LinkedList와 유사하지 않은가...?

iterable과 iterator의 차이는 무엇인가요?

  • Iterable과 Iterator는 Java에서 컬렉션을 순회할 때 사용하는 두 가지 주요 인터페이스이지만, 각자의 역할과 기능이 다릅니다.
List<String> list = Arrays.asList("apple", "banana", "cherry");

// Iterable을 사용한 for-each 순회
for (String fruit : list) {
    System.out.println(fruit);
}
// Iterator를 사용하여 순회
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String fruit = iterator.next();
    System.out.println(fruit);
}

Iterable은 컬렉션이 순회 가능함을 나타내는 인터페이스이며, iterator() 메서드를 통해 Iterator를 반환합니다.
Iterator는 실제 순회를 담당하는 객체로, Iterable 인터페이스의 구현체에서 반환되어 요소를 하나씩 접근하게 합니다.

Iterable은 순회 가능한 컬렉션을 의미하며, Iterator는 그 순회를 직접적으로 수행하는 역할을 합니다.

  • Iterable은 iterator()이라는 메서드가 정의되어 있습니다. 이 메서드는 Iterator 객체를 반환하여 컬렉션 요소를 순회할 수 있게 합니다.
  • Iterator는 Iterable 컬렉션의 요소를 직접 하나씩 탐색하고, 필요시 요소를 제거할 수 있는 도구입니다.
    꼬리물기 - hasNext()를 사용 하는 이유 ? hasNext는 Exception이 날만한 상황 (가변객체에 대한 반복문 사용)에 사용됩니다. ex) RuntimeException, SqlException

Iterable을 상속받아 내부 메서드를 사용한다. Iterator()의 hasNext를 사용한것 처럼 build가 되어 돌아간다.

Collection과 Collections의 차이는 무엇인가요?

  • Collection : Collection은 자바의 컬렉션 프레임워크의 최상위 인터페이스로, 여러 요소를 그룹으로 묶어 다루기 위한 기본적인 메서드를 정의합니다.
  • Collections : Collections는 유틸리티 클래스로, 컬렉션 객체를 다룰 때 유용한 정적 메서드를 제공합니다.
List<String> list = new ArrayList<>();  // List는 Collection 인터페이스를 구현
list.add("Apple");
list.add("Banana");

System.out.println(list.size()); // 출력: 2

Collections.sort(list); // 정렬
System.out.println(list); // 출력: [Apple, Banana]

Collection : 인터페이스로, 컬렉션의 기본 구조를 정의 (데이터 저장 구조).
Collections : 클래스이고, 컬렉션을 다루기 위한 유틸리티 메서드를 제공 (데이터 조작 도구).
Collections는 stream의 메서드와 유사하다..?

profile
건강하개

0개의 댓글