본문 바로가기
교내|외 활동/24-25 동계 모각코

24-25 동계 모각코 | 3회차_컬렉션 프레임워크, 제네릭 복습

by 0/0 2025. 1. 13.

2025.01.13

 

활동 목표

Java 컬렉션 프레임워크, 제네릭 복습

 

활동 결과

 

-컬렉션 프레임워크_LinkedList

 배열의 크기 변경 불가, 비순차적인 데이터의 추가 또는 삭제에 시간이 걸린다는 단점을 보완한 자료구조.

 

 불연속적으로 존재하는 데이터를 서로 연결한 형태로 구성

 각 node들이 자신과 연결된 다음 node에 대한 참조(주소값)와 데이터로 구성

 

*이동방향이 단방향이라 다음 요소에 대한 접근은 쉽지만 이전 요소에 대한 접근은 어려움

->보완한 것: 더블 링크드 리스트(링크드 리스트 + 이전 요소의 주소를 저장)

=>데이터 개수 변경이 잦다면 LinkedList, 없다면 ArrayList

더보기

어레이리스트와 링크드리스트를 조합해서 사용하기

 

데이터를 저장할 때: 어레이리스트

작업할 때: 링크드리스트

ArrayList al = new Arraylist(1000000);
for(int i = 0; i<1000000; i++) al.add(i+"");

LinkedList ll = new LinkedList(al);
for(int i = 0; i<10000; i++) ll.add(500, "X");

 

컬렉션 프레임웍에 속한 대부분의 컬렉션 클래스들은 이처럼 서로 변환이 가능한 생성자를 제공하므로 다른 컬렉션 클래스로 데이터를 간단히 옮길 수 있다.

 

-제네릭

어떤 자료형이든 상관없이 정의해서 사용할 수 있음

public class DynamicAttendanceBook<T> {
	private T[] students;
    public int count;
}

*T는 String, Integer, 다른 객체 등이 될 수 있음

 

제네릭 클래스는 객체를 생성할 때 Generic 타입이 정해짐

DynamicAttendanceBook<String> ab1 = new DynamicAttendanceBook<String(6)>;
DynamicAttendanceBook<Integer> ab2 = new DynamicAttendanceBook<Integer(6)>;

T가 각각 스트링, 정수 타입으로 전환되어 객체가 생성됨.

 

public class DynamicAttendanceBook<T> {
    private T[] students;
    public int count;
    
    public DynamicAttendaceBook(int size) {
    	students = (T[])new Object[size];
        count = 0;
    }
}

생성자 내부에서 students 배열을 만들어서 초기화 시키는데, T가 어떤 클래스 타입인지 알 수 없기 때문에 모든 객체가 상속하고 있는 Object 객체로 만들고 T로 캐스팅을 수행함.

 

참고 문헌

1. 남궁성, Java의 정석, 도우출판, 2016.