배열 대신 컬렉션을 쓴다. 왜?

#JAVA#clean-code

우아한테크코스의 모든 미션에 "배열 대신 컬렉션을 사용하라"는 요구 사항이 항상 존재한다.

그 이유를 알아보자.

두 줄 요약

  1. Java가 이미 잘 만들어놓은 JCF가 존재한다.
  2. 제네릭을 지원한다.

JCF

JCF 계층 구조

Java는 다양한 자료구조와 다양한 알고리즘을 지원한다.

예를 들어 동적 배열은 ArrayList, 연결 리스트는 LinkedList 처럼 말이다.

게다가 각 자료구조에 필요한 동작들, 예를 들어 중간에 값 삽입 혹은 삭제와 같은 동작들 역시 미리 제공한다.

뿐만 아니라, isEmpty(), sort(), clear(), contains() 같은 메서드가 존재한다.

실제로 개발하다보면 위 메서드들이 정말 많이 사용되는데, 만약 컬렉션을 사용하지 않고 배열을 사용한다면 위 메서드들을 재발명해야 할 것이다. 그러면 퇴근이 늦어질 것이다.

따라서 상황에 따라 필요한 자료구조와 제공되는 메서드를 사용한다면 배열을 사용하는 것보다 훠어얼씬 효율적인 개발을 할 수 있을 것이다.

추가로 java.util.concurrent 패키지에서 제공하는 컬렉션들을 통해 Thread-safe한 자료구조도 편하게 사용할 수 있다.

Collections 클래스 내에 UnmodifiableXXX 를 통해 불변식 또한 지킬 수 있다.

Unmodifiable Collections

제네릭을 지원한다

제네릭은 JAVA가 제공하는 유연하고 안전한 기술 중 하나이다.

컬렉션은 제네릭을 지원한다. 하지만 배열은 그렇지 않다.

제네릭에 대한 이해는 이 포스팅 참고

이 제네릭을 사용한다는 것은, 개발자로 하여금 컴파일 타임에 타입 안정성을 보장할 수 있다는 것이다.

이는 어마어마한 메리트이다. 에러가 생겨도 가장 좋은 타이밍은 컴파일 타임인데, 제네릭이 이를 보장한다.
일단 이거만으로도 배열 대신 컬렉션을 쓸 이유가 충분해보인다.


Profile picture

모든 강아지가 행복했으면 하는 꿈을 가진 개발자 김동호입니다.
주로 개발 공부, 독서・생각 기록, 유기견 봉사활동 후기 등을 기록하고 있어요.