개발하는 무민

[코드프레소] Java 웹개발 트랙 체험단 - 컬렉션 프레임워크 본문

Project/[코드프레소] JAVA웹개발트랙

[코드프레소] Java 웹개발 트랙 체험단 - 컬렉션 프레임워크

무민_ 2022. 1. 24. 17:15

컬렉션 프레임워크 : List

컬렉션 프레임워크의 개념

컬렉션 프레임워크란?

여러 건의 데이터를 다루기 위해서는 array와 같은 데이터를 다루기 위한 자료구조의 구현체 필요

다양한 특성을 가진 데이터를 다루기 위해서는 그에 적합한 자료구조 필요

컬렉션 프레임워크란 다양한 자료구조의 구현을 위한 클래스와 인터페이스의 집합이다.

 

자바에서는 다양한 자료구조의 구현체를 클래스 형태의 라이브러리를 제공한다.

⇒ java.util.ArrayList<E>

⇒ java.util.HashSet<E>

⇒ java.util.HashMap<K,V>

 

각 자료구조에 저장된 데이터를 다루기 위한 알고리즘 구현체가 필요하다.

(데이터 조회, 삭제, 추가 등)

→ 제공되는 클래스에서 데이터를 가공하기 위한 메서드를 각각 제공한다.

⇒ java.util.ArrayList<E> : .add(), .get(), size(), remove() ...

⇒ java.util.HashSet<E> : add(), .addAll(), size(), remove() ...

⇒ java.util.HashMap<K,V> : put(), get(), size(), remove() ...

 

컬렉션 프레임워크 클래스와 Array

컬렉션 프레임워크는 어레이를 발전시켜서 효율적으로 저장하기 위한 기능이 있다.

데이터 개수의 동적인 변경 가능 (어레이는 불가함) → ArrayList가 해당된다.

객체만을 원소로 가진다.

어레이 : 오브젝트, 인트, 플롯, 문자열 등 모두 원소로 가질 수 있음

컬렉션프레임워크 : 오브젝트만 가능

→ 그렇다고 숫자나 문자를 저장 못하는건 아니고, 값이 저장되어있는 레퍼런스 타입의 value들이 오브젝트 형태로 저장된다고 생각하면 된다.

 

컬렉션 프레임워크의 주요 인터페이스

컬렉션 프레임워크에는 아래의 주요 인터페이스가 정의

list, set : 여러 개의 원소를 위치 순서에 따라 가지고 있음

map : 키와 벨류 형태로 저장됨. 구조가 다르므로 콜렉션을 상속받지 않고 독자적으로 구현한다.

 

컬렉션 프레임워크 인터페이스들의 상속관계

  • java.util.Collection<E> 인터페이스 그룹 : 콜렉션 인터페이스 (리스트, 셋)
  • java.util.Map<K,V> 인터페이스 그룹 : 맵 인터페이스

 

주요 인터페이스들의 특징

  • java.util.List<E> 인터페이스 : 리스트 인터페이스

리스트 자료구조를 구현해서 생성한 인터페이스.

순서가 있고, 중복 허용함

 

  • java.util.Set<E> 인터페이스 : 셋 인터페이스

순서가 없고, 중복 허용하지 않음

(GDP, 한국이 1등, 2등 꼴등도 가능, 그러므로 저장되는 데이터의 순서는 없음)

 

  • java.util.Map<K,V> 인터페이스 : 맵 인터페이스

키-벨류로 이루어진 페어 데이터의 집합

데이터들 간 순서 없음

키는 중복 허용하지 않고, 벨류는 중복 허용한다.

(사람 → 키 180 중복 가능)

 

 

제네릭과 컬렉션 프레임워크

제네릭(Generic) 이란?

데이터의 타입을 일반화(generalize)한다.

클래스나 메소드에서 사용할 데이터의 타입을 컴파일 시 type check하여 런타임 시 안정성이 보장됨

 

제네릭의 사용

제네릭을 사용한 클래스 정의 문법

class ClassName<T> {}

T를 타입 개념으로 씀으로써, 임의의 데이터 타입의 이름을 지정할 수 있다.

실제 타입과 동일하게 사용할 수 있다.

 

제네릭의 사용

ClassName**<Type-Class>** object-name = new ClassName<> ();

내가 지정하고자 하는 타입의 이름을 <> 안에 적어준다. (type variable)

 

제네릭의 장점

매개 변수의 범용성(generality) 확보 가능

  • 클래스 내 임의의 변수를 매번 다른 데이터 타입으로 지정하여 객체 생성 가능

컴파일 시 타입체크로 인한 런타임 안정성 확보 가능

타입변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.

 

object class를 인자를 이용한 class 정의

  • object는 최상위 클래스이므로 제네릭과 같은 범용성 확보 가능하다.
  • 단, 컴파일 시, 타입체크 미수행으로 안정성이 저하될 수 있다.
  • class에 적합하지 않은 데이터 타입을 사용해도 에러가 발생하지 않는다.
  • 컴파일 시 발견되지 않은 에러가 런타임에 발생될 수 있다.
  • 불필요한 명시적 형변환으로 인해 성능이 저하될 수 있다.

 

제네릭과 컬렉션 프레임워크

컬렉션 프레임워크의 클래스와 인터페이스들은 제네릭을 이용해 데이터 타입의범용성을 확보한다.

<E> 는 element의 약어

<K,V> key와 Value가 사용되는 형태

 

List 자료구조 컬렉션 클래스에 대한 이해

List인터페이스는 Collection<E> 인터페이스를 상속하여 정의된 인터페이스이다.

(리스트가 부모, 콜렉션이 자식, 그 밑의 자식이 이터레이블이다.)

그래서 Collection 인터페이스에서 정의된 메서드에 List 자료구조에 필요한 메서드가 추가로 정의된다.

콜렉션에는 add(하나의 원소를 가짐), clear, contains, equals .. 함수 등 제공

리스트에는 add(인덱스를 인자로 가짐), get(특정 위치 값 가져옴), remove(인덱스 인자로 가짐) .. 추가적으로 정의되어 있는 메서드가 더 있다.

대표적인 List 자료구조의 컬렉션 클래스

→ 어레이 리스트가 가장 많이 사용되는 클래스이다.

 

ArrayList<E> 클래스에 대한 이해

Array와 가장 유사한 컬렉션 클래스.

Array 처럼 객체 내부 데이터에 접근하기 위한 인덱스가 존재한다.

Array와 다르게 생성된 객체에서 데이터의 추가와 삭제가 자유롭게 가능하다.

Java.util 패키지에 존재한다.

 

List 자료구조 컬렉션 클래스의 활용

ArrayList<E> 객체 생성

어레이리스트 객체 생성 문법

→ import java.util.ArrayList : 어레이 리스트를 사용하기 위해 컴파일러에 해당 클래스가 존재하는 패키지 정보를 제공한다.

→ ArrayList : 생성하고자 하는 객체가 어레이 리스트 클래스임을 지정한다.

→ <Type-Class> : 제네릭을 이용해 ArrayList 객체 내에서 사용할 데이터 타입을 지정한다. (데이터 타입의 클래스 이름을 사용한다.)

→ arrayList-name : 생성하고자 하는 어레이리스트 객체의 변수명 지정

 

ArrayList<E> 객체의 데이터 추가

  • 주요 함수 알아보기

boolean add(E e) : 컬렉션인터페이스부터 정의되어있음. 추가하고자 하는 데이터를 인자로 전달하면 어레이 리스트 객체에 추가하여 불리안으로 반환해줌

void add(int index, E e) : 인덱스를 인자로 넣어 지정하고, 위치를 정해서 추가할 수 있다.

boolean addAll(Collection<? extends E> C) : 우리가 가진 리스트 객체에 특정한 여러건의 데이터를 추가할때 사용, 모든 자료구조의 원소를 전달하여 추가할 수 있다. 불리안 형태의 수행 결과 반환함

void addAll(int index, Collection<? extends E> C) : 원하는 인덱스 위치에 추가 가능

 

 


https://www.codepresso.kr/