본문 바로가기
코드프레소 체험단/Java 프로그래밍

[Java 프로그래밍 초급] 컬렉션 프레임워크

by 의정부핵꿀밤 2022. 6. 8.
728x90

< 컬렉션 프레임워크의 개념 >

 

컬렉션 프레임워크(collection framework)란?

  • 여러 건의 데이터를 다루기 위해서는 Array와 같은 데이터를 다루기 위한 자료구조의 구현체가 필요하다
  • 다양한 특성을 가진 데이터를 다루기 위해서는 그에 적합한 자료구조가 필요하다
  • 컬렉션 프레임워크란 다양한 자료구조의 구현을 위한 클래스와 인터페이스의 집합이다

 

 

 

컬렉션 프레임워크의 필요성

  • 다양한 데이터를 위한 자료구조의 구현체가 필요하다
  • 다양한 자료구조의 구현체를 클래스 라이브러리 형태로 제공한다

 

  • 자료구조에 저장된 데이터를 다루기 위한 알고리즘 구현체가 필요하다
  • 제공되는 클래스에서 데이터를 가공하기 위한 메서드 제공

 

 

 

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

  • 데이터 개수의 동적인 변경이 가능하다

  • 객체만을 원소로 갖는다

 

  • 컬렉션 프레임워크에는 아래의 주요 인터페이스가 정의한다
    • List 인터페이스
    • Set 인터페이스
    • Map 인터페이스
  • List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받아 정의한다
  • Map 인터페이스는 구조상 차이로 Collection 인터페이스를 상속 받지 않는다

 

 

 

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

  • java.util.Collection<E> 인터페이스 그룹

 

  • java.util.Map<K,V> 인터페이스 그룹

구조상의 차이로 Collection 인터페이스를 상속받지 않고 독립적으로 정의된다

 

 

 

주요 인터페이스들의 특징

  • 순서가 있는 데이터의 집합
  • 데이터들의 중복을 허용한다

 

  • 순서가 없는 데이터의 집합
  • 데이터들의 중복을 허용하지 않는다

 

  • Key와 Value로 이루어진 pair를 갖는 데이터의 집합
  • 데이터들 간의 순서가 없다
  • Key는 중복을 허용하지 않고, Value는 중복을 허용한다

 


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

 

제네릭(generic) 이란?

  • 데이터의 타입을 일반화한다(generalize)는 것을 의미한다
  • 클래스나 메소드에서 사용할 데이터의 타입을 컴파일 시 type check하여 런타임 시의 안정성이 보장된다

 

 

 

제네릭의 사용

  • 제네릭을 사용한 클래스 정의 문법
class ClassName<T> {}
  • <T> 
    • 클래스 내부에서 사용될 임의의 데이터 타입을 'T' 라는 type variable로 지정한다
    • 'T'는 Type의 약어로 관행적으로 사용되는 이름이다
    • type variable 'T'를 이용해 클래스 내부 변수 생성 및 메소드의 인자, 반환 값의 타입 지정 가능
    • 'T'라는 type variable은 임의 값으로 지정 가능
  • 제네릭을 사용한 클래스 정의

  • 제네릭을 사용한 클래스 객체 생성 문법
ClassName<Type-Class. object-name = new ClassName<>();
  • ClassName : 생성하고자 하는 Class 지정
  • <Type-Class> :
    • 클래스 정의 시 type variable에 사용할 실제 데이터 유형 Class
    • Primitive Type 데이터의 경우 Wrapper Class를 사용한다
      • int => Integer, double => Double, float => Float, etc...
  • object-name : 객체의 변수명 지정

 

 

 

제네릭을 사용한 클래스 객체 생성 문법

 

 

 

제네릭의 장점

  1. 매개 변수의 범용성(generality) 확보
    • 클래스 내 임의의 변수를 매번 다른 데이터 타입으로 지정하여 객체 생성이 가능하다
  2. 컴파일 시 type check로 인한 런타임 안정성 확보가 가능하다
  3. 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다

 

 

 

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

 

 

 

2. 컴파일 시 type check로 인한 런타임 안정성을 확보한다

 

 

 

3. Object Class를 인자로 이용한 Class 정의

  • Object는 최상위 Class이므로 제네릭과 같은 범용성 확보가 가능하다
  • 컴파일 시 type check 미수행으로 안정성이 저하된다
    • Class에 적합하지 않은 데이터 타입을 사용해도 error가 발생하지 않는다
    • 컴파일 시 발견되지 않은 error가 런타임 시 발생할 수 있다
  • 불필요한 명시적 형변환으로 인한 성능이 저하된다

명시적 형 변환으로 인한 성능 저하

 

  • 하지만 제네릭을 이용해 범용성을 확보 시 명시적 형 변환이 필요 없다

 

 

 

 

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

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

728x90

댓글