JAVA - 제네릭(Generics)과 컬렉션(Collection)

이재원·2024년 12월 13일
0

JAVA

목록 보기
10/10

제네릭(Generics)

제네릭은 모든 종류의 타입을 다룰 수 있도록, 클래스나 메서드를 타입 매개변수를 이용하여 선언하는 기법이다. 이는 C++의 템플릿과 동일하다.

제네릭 타입 매개변수

컬렉션 클래스에서 타입 매개변수로 사용하는 문자는 다른 변수와 혼동을 피하기 위해 일반적으로 하나의 대문자를 사용한다. 다음은 관례적으로 사용하는 문자이다.

  • E: Element를 의미하며 컬렉션에서 요소임을 나타낸다.
  • T: Type을 이미
  • V: Value를 의미
  • K: Key를 의미

제네릭 클래스의 처리 방법

일반화된 타입을 갖는 클래스를 정의하여 객체 생성시 지정된 타입의 객체만 담을 수 있도록 한다. 이 과정을 통해 컴파일 단계에서 확인 가능해진다.

컬렉션의 개념

컬렉션은 데이터를 효율적으로 저장하고 관리하기 위한 클래스와 인터페이스의 집합이다.컬렉션은 안드로이드를 비롯한 자바 프로그램을 작성하는데 빼놓을 수 없는 중요한 도구이다. 자바의 JDK는 많은 자료구조를 컬렉션으로 만들어 제공하며, 이를 통해 데이터를 쉽게 처리할 수 있다.

컬렉션의 구조

java.util 패키지에 포함되어 있으며, 다음과 같은 주요 인터페이스와 클래스들로 구성된다.

주요 인터페이스

Collection

  • 컬렉션의 기본 인터페이스. 모든 컬렉션 클래스는 이 인터페이스를 상속받는다

List

  • 시작과 끝이 선정되어 정장되는 요소들을 일괄적인 정렬 상태를 유지하면서 저장된다
  • 순서가 있는 데이터 저장하며, 중복 허용한다.(ex. ArrayList, LinkedList)
  • 데이터 저장을 위해 별도의 인덱스 정보를 관리할 필요 없고, 삭제를 위한 추가적인 코드 작성 필요 없으며, 필요시 할당 크기가 자동으로 증가한다.
  • 가변적 길이의 배열과 비슷하며 내부적으로 배열을 이용하여 구현되어 있다.
  • 저장되는 데이터 수가 예측 가능하며 빈번한 참조가 일어나는 경우 유용하다.

Set

  • 중복을 허용하지 않는 데이터 저장하며, 순서 보장하지 않는다. (ex. HashSet)

Map

  • 키-값 쌍으로 데이터 저장. 키는 중복을 허용하지 않는다.(ex. HashMap)
  • 값을 검색하기 위해서는 반드시 키를 이용해야 한다.
  • 내부 구성
  • 사용 예

주요 클래스

Vector

  • 가변 크기의 배열 객체로, 제네릭을 이요하여 사용할 특정 자료형으로 구체화한다.

  • 내부적으로 Object 타입의 배열로 구현되어 있다.

  • 배열의 할당 크기 제한 극복(할당 크기 넘어가면 자동으로 크기 조절)

  • 요소 객체들의 삽입/삭제/검색 제공

  • 작동 방식

  • 벡터에 값을 넣거나 삭제할 때 자동 박싱/언박싱 된다.

  • 단, 타인 매개변수를 기본 자료형으로 구체화 할 수는 없다.

  • 주요 메서드

ArrayList

  • 크기가 가변적인 배열로, 기본 기능은 벡터와 거의 같다.
  • 벡터와 달리 스레드 동기화 기능이 없고, 이로 인해 벡터보다 가볍다. 필요시 별도의 스레드 동기화 코드 작성 필요하다.
  • 작동 원리
  • 주요 메서드

LinkedList

  • 노드 기반 자료구조로, 삽입/삭제가 자주 발생할 때 유리하다.(내부는 연결리스트로 구현되어 있음)
  • 잦은 참조가 필요한 경우 부적합(연결 리스트는 탐색 비용이 높음)
  • 내부 구성

컬렉션의 특징

  1. 컬렉션은 제네릭(generics)이라는 기법으로 만들어져 있다.
  2. 컬렉션의 요소로는 객체들만 가능하다.
  3. 기본 자료형의 경우 wrapper 클래스로 객체화 한 후 저장된다.

Iterator를 이용한 순차적 접근

컬렉션에서 요소의 순차 검색을 위한 인터페이스이다.

컬렉션 클래스의 종류에 상관없이 동일한 형태의 데이터 참조 방식을 유지하기 때문에 데이터 전부를 참조할 때 유용하다.

특히 set과 같이 순서가 없는 컬렉션은 요소에 접근하기 어려운데 이 때 유용하다.

사용 방법

한 방향으로만 접근하기 때문에 처음으로 돌아갈 필요가 있다면 재선언 해주면 된다.

출처
명품 JAVA programming - 황기태, 김효수
https://www.youtube.com/사람만이

profile
20학번 새내기^^(였음..)

0개의 댓글