배열(Array) / 컬렉션(Collection)

이수현·2025년 6월 26일

Java

목록 보기
5/10
post-thumbnail

📘 1. 배열 (Array)

배열이란 같은 자료형의 데이터를 연속된 공간에 고정된 크기로 저장하는 자료 구조

배열이 필요한 이유?

int score1 = 90;
int score2 = 86;
int score3 = 78;
...

위를 배열을 사용하면:

int[] scores = new int[5];
scores[0] = 90;
scores[1] = 85;

배열 선언과 초기화

//1. 선언 + 크기 지정
int[] numbers = new int[3]; //0으로 초기화

//2. 선언 + 값 초기화
int[] numbers = {10, 20, 30};

//3. 반복문으로 접근
for (int i = 0, i < numbers.length; i++){
   system.out.println(numbers[i]);
}

배열의 특징 정리

  • 고정 크기 : 선언 시 크기 지정, 변경 불가
  • 동일 자료형 : 모든 원소가 같은 타입
  • 인덱스 기반 : 인덱스는 0부터 시작
  • 기본값 자동 할당 : 숫자는 0, 참조형은 null 등으로 초기화

배열의 한계

  • 크기 조절 불가
  • 요소 추가/삭제 어려움
  • 정렬/검색 등 직접 구현해야함

📗 2. 컬렉션(Collection)

  • Java에서 '컬렉션'이라는 단어는 java.util.Collection 인터페이스를 의미하는 경우가 많음
  • Collection은 자바 컬렉션 프레임워크 내에서 데이터 그룹(객체들의 모임)을 표현하는 최상위 인터페이스 중 하나.
  • 즉 여러 데이터를 한꺼번에 다루기 위한 공통된 기능(메서드)를 장악해놓은 계약(인터페이스).

Collection 인터페이스 구조

public interface Collection<E> extends Iterable<E> {
   boolean add(E e); // 요소 추가
   boolean remove(Object 0); // 요소 삭제
   boolean contains(Object 0); // 포함 여부 확인
   int size(); // 크기(요소 개수)
   boolean isEmpty(); // 비었는지 확인
   void clear(); // 모두 삭제
   Iterator<E> iterator(); // 반복자 반환
   //그 외 여러 메서드 존재
}
  • < E >는 제네릭 타입으로, 저장할 데이터 타입을 지정합니다.
  • Collection은 Iterable을 상속하므로, 향상된 for문(for-each)으로 순회 가능

Collection 인터페이스를 직접 구현하는 클래스는 거의 없다.

컬렉션 프레임워크 내에서 Collection을 상속받는 주요 하위 인터페이스는 다음과 같다.

  • List : 순서 있는 데이터 저장, 중복 허용
  • Set : 순서 없거나 정렬된 데이터 저장, 중복 불허
  • Queue : FIFO(선입선출) 방식 데이터 저장
  • 이 하위 인터페이스들이 Collection의 기본 기능을 확장해서 구현.

Collection의 하위 인터페이스별 특징

1. List 인터페이스

  • 순서가 있고 인덱스로 접근 가능한 데이터 집합.
  • 데이터 중복 허용.
  • 구현체 : ArrayList, LinkedList, Vector 등
List<String> list = new ArrayList<>();
list.add("A");
list.add("B"):
list.add("A"):
system.out.println(list.get(1)); //"B" 출력

2. Set 인터페이스

  • 순서가 없거나 정렬된, 중복이 없는 데이터 집합
  • 구현체 : HashSet, TreeSet, LinkedHashSet
Set<String> Set = new HashSet<>();
set.add("A");
Set.add("B");
Set.add("A"); // 무시됨(중복 x)
System.out.println(set.size()); // 2 출력

3. Queue 인터페이스

  • 주로 선입선출(FIFO) 자료 구조로 사용
  • 구현체 : LinkedList, PriorityQueue

Collection 인터페이스를 사용하는 이유?

  • 통일된 메서드로 다양한 자료 구조를 다룰 수 있음
  • 예를들어, Collection 타입으로 변수를 선언하면,
    • ArrayList, HashSet 등 어떤 구현체를 써도 같은 메서드를 사용할 수 있다.
Collection<String> coll = new ArrayList<>();
coll.add("A");
coll.remove("A");
System.out.println(coll.isEmpty());
  • 이렇게 하면 코드가 더 유연해지고 나중에 구현체를 바꾸기가 쉬움
profile
신입개발자의 공부 기록

0개의 댓글