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 : 객체의 변수명 지정
제네릭을 사용한 클래스 객체 생성 문법
제네릭의 장점
- 매개 변수의 범용성(generality) 확보
- 클래스 내 임의의 변수를 매번 다른 데이터 타입으로 지정하여 객체 생성이 가능하다
- 컴파일 시 type check로 인한 런타임 안정성 확보가 가능하다
- 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다
1. 클래스 내 임의의 변수를 매번 다른 데이터 타입으로 지정하여 객체 생성이 가능하다
2. 컴파일 시 type check로 인한 런타임 안정성을 확보한다
3. Object Class를 인자로 이용한 Class 정의
- Object는 최상위 Class이므로 제네릭과 같은 범용성 확보가 가능하다
- 컴파일 시 type check 미수행으로 안정성이 저하된다
- Class에 적합하지 않은 데이터 타입을 사용해도 error가 발생하지 않는다
- 컴파일 시 발견되지 않은 error가 런타임 시 발생할 수 있다
- 불필요한 명시적 형변환으로 인한 성능이 저하된다
- 하지만 제네릭을 이용해 범용성을 확보 시 명시적 형 변환이 필요 없다
제네릭과 컬렉션 프레임워크
- 컬렉션 프레임워크의 클래스와 인터페이스들은 제네릭을 이용해 데이터 타입의 범용성을 확보한다
728x90
'코드프레소 체험단 > Java 프로그래밍' 카테고리의 다른 글
[Java 프로그래밍 초급] Map 자료구조 컬렉션 클래스 (0) | 2022.06.10 |
---|---|
[Java 프로그래밍 초급] List 자료구조 컬렉션 클래스 (0) | 2022.06.09 |
[Java 프로그래밍 초급] Map 자료구조 컬렉션 클래스 (0) | 2022.01.27 |
[Java 프로그래밍 초급] 객체지향 고급 (3) (0) | 2022.01.25 |
[Java 프로그래밍 초급] 객체지향 고급 (2) (0) | 2022.01.21 |
댓글