LALA's blog

[우테코 강의] 자바 List, Generic 본문

개발/우아한테크코스

[우테코 강의] 자바 List, Generic

lala.seeun 2022. 2. 25. 19:25

java.util.List Interface

- 자바는 배열과 같은 데이터를 효과적으로 관리하기 위해 배열 대신 List 를 제공한다.

- List 는 ArrayList, LinkedList 두 가지 종류가 있다.

- 일반적으로 ArrayList 를 가장 많이 사용한다.

- List 는 배열에서 지원하지 않는 많은 기능을 제공한다.

- 지금까지 배열을 사용했다면 배열 대신 List를 사용한다.

 

ArrayList

- 배열을 감싸서 사용할 수 있도록 기능을 제공해준다.

- Object[]

- 일급 컬렉션이라고 볼 수 있다.

- 사이즈도 동적으로 늘린다.

- 인덱스로 접근할 수 있다. O(n)

 

LinkedList

- Node 들을 가지고 있다.

- 앞 뒤가 연결되어 있다.

- 연결만 하면 되기 때문에 사이즈를 미리 정해둘 필요가 없다.

- 노드를 하나씩 건너가면서 탐색할 수 있다.

- 연결만 끊고 추가해주면 되기 때문에 추가/삭제가 용이하다.

 

 

Generic

- List 와 같이 다양한 종류의 데이터를 관리하는 경우 데이터의 타입을 특정 타입으로 고정할 수 있다.

 

장점

- 특정 타입으로 제한함으로써 타입 안정성을 제공한다.

- 타입 체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.

List<Integer> integers;
List<Car> cars;

- 위처럼 여러 타입을 넣을 수 있다.

 

- 컴파일 타임에 타입을 정할 수 있게 해준다.

- 내부에서 타입이 지정되는 것이 아니라 외부에서 타입이 지정될 수 있다.

 

🤔. 만약 Generic 을 사용하지 않는다면?

List integers = new ArrayList():
integers.add(1);
// integers.add("1"); 옳은 타입이 들어가는 지 컴파일 시 알 수 없다.

Object o = integers.get(0);
if (o instanceof Integer) {
    Integer value = (Integer) o; // casting 이 필요하다.
}

- 타입이 정해져 있지 않기 때문에 옳은 타입인지 컴파일 시 알 수 없다.

- casting 을 통해 체크하며 타입 변환을 해줘야한다.

 

- 다형성의 이점을 활용할 수 없다.

- 인터페이스가 아닌 구현체에 의존한다.