[260514]컬렉션과 제네릭

이상민·2026년 5월 14일

Spring

목록 보기
8/59

목차

컬렉션

자바에서 컬렉션(Collection)은
여려 개의 데이터를 쉽고 효율적으로 저장하기 위한 객체들의 모음이다.

컬렉션을 사용하는 이유

int[] arr = new int[3];
String[] fruits = new String[3];

일반적인 배열은 이렇게 선언된다.
하지만 배열은 크기가 고정되어 있기 때문에, 처음 정한 크기를 넘어서는 데이터를 저장할 수 없다.
예를 들어,

arr[3] = 10;

처럼 배열의 범위를 벗어난 인덱스에 접근하게 될경우 ArrayIndexOutOfBoundsException오류가 발생한다.

하지만 컬렉션을 사용할경우,

List<String> list = new ArrayList<>();

배열처럼 크기를 미리 지정하지 않아도 된다.

list.add("사과");
list.add("딸기");

이런식으로 데이터를 추가하면 컬렉션의 크기가 자동으로 증가한다.


컬렉션의 장점

  • 데이터 추가/삭제가 편리하다
  • 크기를 설정하지 않아도 된다
  • 다양한 기능을 제공한다

컬렉션의 주요 명령어

List<String> list = new ArrayList<>(); //<>내부는 생략가능
//데이터 추가
list add("사과")
//데이터 가져오기
System.out.println(list.get(0));
//데이터 삭제
list.remove(1)
//컬렉션의 크기 반환
System.out.println(list.size());
//데이터 검색
System.out.println(list.contains("사과"));
//데이터 수정
list.set(0, "사과");
//모든 데이터 삭제
list.clear();
//데이터 존재 여부 확인
System.out.println(list.isEmpty());

제네릭

제네릭(Generic)은 클래스나 메서드에서 변수를 선언할때 미리 데이터 타입을 정하는것이 아닌,
사용할 때 타입을 결정하는 기능이다.


제네릭을 사용하는 이유

미리 변수 타입을 지정해놓으면
다른 타입의 데이터를 사용할 때 코드를 재사용하기 어려워진다.
또한 String타입 으로 선언되어 있는데, 실수로 Integer 로 받을경우와 같은 오류 처리를 할 수 없다.

제네릭을 사용하면 사용할 타입을 컴파일 시기에 결정하기 때문에, 하나의 코드로 여러타입을 처리할 수 있으며 타입 안정성도 높아진다.


제네릭의 장점

  • 타입 오류를 방지할 수 있다
  • 하나의 코드로 여러 자료형을 재사용 할 수 있다
  • 형병환을 자동으로 해주어 코드가 간결해진다
  • 가독성이 좋아진다

예시 코드

public class GenericBox<T>{

	//속성
    private T item;
    
    //생성자
    public GenericBox(T item){
    	this.item=item;
    }
    
    //게터
    public T getItem(){
    	return this.item;
    }
    
	public void printItem(T item){ //일반메서드 다운캐스팅을 직접 해줘야하는 번거로음이 있음
		System.out.println(item);
	}
	public <S> void printBoxItem(S item){ //다운캐스팅까지 알아서 해줌
		System.out.println(item);
    }
	
}
public class Main{
	
    public static void main(String[] args){
        
        // 1. 재사용 가능(컴파일시 타입소거: T -> Object)
        GenericBox<String> strGBox = new GenericBox<>("ABC");
        GenericBox<Integer> intGBox = new GenericBox<>(100);
        GenericBox<Double> doubleGBox = new GenericBox<>(0.1);

        // 2. 타입 안정성 보장(컴파일시 타입소거: 자동으로 다운캐스팅)
        String strGBoxItem = strGBox.getItem();
        Integer intGBoxItem = intGBox.getItem();
        Double doubleGBoxItem = doubleGBox.getItem();
        System.out.println("strGBoxItem = " + strGBoxItem);
        System.out.println("intGBoxItem = " + intGBoxItem);
        System.out.println("doubleGBoxItem = " + doubleGBoxItem);
    
    }
}
profile
백앤드 개발 브이로그

0개의 댓글