jujuwon
시크릿주주
jujuwon
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • 🔠 프로그래밍언어 (35)
      • ☕️ Java (19)
      • 🐠 Python (15)
      • 🍠 Kotlin (1)
    • 🔙 Backend (16)
      • 🌿 Springboot (12)
      • 🐳 Docker (1)
      • ☁️ AWS (3)
    • 💼 CS (12)
      • 📶 Network (12)
    • 🕹 알고리즘 (14)
      • 📑 스터디 (2)
      • 💁🏻‍♂️ 백준 (9)
      • 👨🏼‍🔬 프로그래머스 (3)
    • 📚 Book (8)
      • 🔎 오브젝트 (4)
      • 🧪 TDD (2)
      • 📜 논문 (2)
    • 🔐 보안 (7)
      • 👾 Pwnable (7)
    • 📝 회고 (4)
    • 🧩 etc. (10)
      • ⚠️ issue (2)
      • 💡 꿀팁 (7)
      • ✏️ 끄적 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
jujuwon

시크릿주주

Java :: Collections Framework
🔠 프로그래밍언어/☕️ Java

Java :: Collections Framework

2022. 7. 24. 15:40
반응형

남궁성 저자의 Java의 정석 3판 스터디

Collections Framework 는

데이터 그룹을 다루고 표현하기 위한 단일화된 구조 라고 정의하고 있다 (Java API docs)

무슨 말인지는 천천히 읽어가다보면 이해가 될 것이다 🙂

 

Collections Framework 란


Collections Framework 은 컬렉션이나 다수의 데이터를 다루는 데에 필요한

다양한 클래스들을 제공하고 있다.

객체지향적 설계를 통해 표준화되어 있어서 사용법 익히기에도 편리하고

재사용성 높은 코드를 작성할 수 있다.

 

핵심 인터페이스


Collections Framework 에서는 Collection Data 그룹을 크게 3가지 타입으로 보고

각 컬렉션을 다루는데 필요한 기능을 가진, 3개의 인터페이스를 정의했다.

 

 

인터페이스 List 와 Set 을 구현한 컬렉션 클래스들은 공통부분이 많아서

공통 부분들을 뽑아서 Collection 인터페이스를 정의할 수 있었지만

Map 인터페이스는 전혀 다른 형태로 컬렉션을 다루기 때문에 같은 계층도에 포함되지 못했다.

  • List : 순서가 있는 데이터의 집합, 데이터의 중복 허용
    • 구현 클래스 : ArrayList, LinkedList, Stack, Vector 등
  • Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복 허용 X
    • 구현 클래스 : HashSet, TreeSet 등
  • Map : Key, Value 의 쌍으로 이루어진 데이터의 집합.
    순서는 유지되지 않고, Key 는 중복 허용 X, Value 는 중복 허용
    • 구현 클래스 : HashMap, TreeMap, Hashtable, Properties 등

Collections Framework 의 모든 컬렉션 클래스들은 List, Set, Map 중의 하나를 구현하고 있다.

💡 정보 : 모든 컬렉션 클래스들은 구현한 인터페이스의 이름이 클래스 이름에 포함되어 있어서
이름만으로도 클래스의 특징을 쉽게 알 수 있도록 되어있다 !
Vector, Stack, Hashtable, Properties 같은 클래스들은 Collections Framework 이 만들어지기 전부터 존재했었어서
Collections Framework 의 명명법을 따르지 않는다 🙂

 

Vector 나 Hashtable 과 같은 기존의 컬렉션 클래스들은 호환을 위해

설계를 변경해서 남겨두었지만 가능하면 사용하지 않는 것이 좋다.

대신에 새로 추가된 ArrayList 와 HashMap 을 사용하자 ‼️

 

 

Collection 인터페이스에는 여러 method 들이 정의되어 있는데,

그 중에서 몇 가지만 예로 들어보면 아래와 같다.

 

boolean add(Object o) // 객체들을 Collection 에 추가
boolean isEmpty() // Collection 이 비어있는지 확인
Iterator iterator() // Collection 의 Iterator 를 얻어서 반환
boolean remove(Object o) // 지정된 객체를 삭제
int size() // Collection 에 저장된 객체의 개수를 반환
Object[] toArray() // Collection 에 저장된 객체를 객체배열 (Object[]) 로 반환

List 인터페이스


List 인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는 데 사용된다.

 

 

List 인터페이스에 정의된 method 는 다음과 같다.

void add(int index, Object element) // index 위치에 element 나 컬렉션에 포함된 객체 추가
boolean addAll(int index, Collection c) // 위와 동일

Object get(int index) // index 위치에 있는 객체 반환
int indexOf(Object o) // 지정된 객체의 index 반환
int lastIndexOf(Object o) // 역방향 index 반환

Object remove(int index) // index 위치에 있는 객체 삭제, 삭제된 객체 반환
Object set(int index, Object element) // index 위치에 element 저장

void sort(Comparator c) // 지정된 비교자 (Comparator)로 List 를 정렬

 

Set 인터페이스


Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용된다.

 

 

 

Map 인터페이스


Map 인터페이스는 Key 와 Value 를 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용된다.

 

 

Map 인터페이스에 정의된 method 는 다음과 같다.

 

void clear() // Map 의 모든 객체를 삭제

boolean containKey(Object key) // 지정된 key 객체와 일치하는 Map 의 key 객체가 있는지 확인
boolean containValue(Object value) // 위와 동일 (key 대신 value로)

Set entrySet() // Map 에 저장되어 있는 k,v 쌍을 Map.Entiry 타입의 객체로 저장한 Set으로 반환
boolean equals(Object o) // 동일한 Map 인지 비교
Object get(Object key) // 지정한 key 객체에 대응하는 value 객체 반환
int hashCode() // 해시코드 반환
Set keySet() // Map 에 저장된 모든 key 객체 반환

Object put(Object key, Object value) // Map 에 value 객체를 key 객체에 mapping 하여 저장
void putAll(Map t) // 지정된 Map 의 모든 k,v 쌍을 추가
Object remove(Object key) // 지정한 key 객체와 일치하는 k,v 객체를 삭제

int size() // Map 에 저장된 k,v 쌍의 개수 반환
Collection values() // Map 에 저장된 모든 value 객체 반환

 

values() 에서는 반환타입이 Collection 이고, keySet() 에서는 반환타입이 Set 인 것에 주목 ‼️

Map 인터페이스에서 value 는 중복을 허용하기 때문에 Collection 타입으로 반환하고,

key 는 중복을 허용하지 않기 때문에 Set 타입으로 반환한다 !

 

Map.Entry 인터페이스


Map.Entry 인터페이스는 Map 인터페이스의 내부 인터페이스.

Map 에 저장되는 k,v 쌍을 다루기 위해 내부적으로 Entry 인터페이스를 정의해놓았다.

다음은 Map 인터페이스 소스코드의 일부분이다.

 

public interface Map {
    ...
    public static interface Entry {
        Object getKey(); // Entry 의 key 객체 반환
        Object getValue(); // Entry 의 value 객체 반환
        Object setValue(Object value); // Entry 의 value 객체를 지정된 객체로 바꿈
        boolean equals(Object o); // 동일한 Entry 인지 비교
        int hashCode(); // Entry 의 해시코드 반환
        ...
    }
}

 

Collections Framework 에 대해서 살펴보았으니,

이제 이 인터페이스를 구현한 컬렉션 클래스에 대해서 살펴보자 🙂

728x90
반응형
저작자표시
    '🔠 프로그래밍언어/☕️ Java' 카테고리의 다른 글
    • Java :: 람다와 스트림 (1/2)
    • Java :: Collection Class
    • Java :: 객체지향 프로그래밍 (1/2)
    • JAVA :: JVM의 메모리 구조
    jujuwon
    jujuwon

    티스토리툴바