백엔드 개발자라면 대답해야 할 100가지 질문

8. 자바 컨테이너는 무엇을 의미하나요?

ignuy 2023. 8. 1.

데이터의 ‘저장’이라는 의미로 가장 먼저 등장한 자료구조는 배열이다. 배열을 사용하면 동일한 성질을 가진 primitive type 또는 Reference type의 값을 저장할 때 활용할 수 있다. 하지만 이 글을 읽는 사람들은 대부분 알다시피 배열에는 무시할 수 없는 큰 단점이 있다. ‘크기가 정해지면 바뀔 수 없다.’라는 배열의 성질은 자료 저장의 확장성을 크게 저해하는 요소이다.

이를 해결하기 위해 다양한 자료구조들을 지원하려는 목적으로 등장한 것이 java.util 라이브러리의 container 클래스이다. 주의!!!! 스윙에 사용되는 java.awt.container와 다르다. 대표적인 기본 타입으로 List, Set, Map 등이 있는데 이들은 container라는 클래스에 물리적으로 묶여있는 계층구조가 아니라 자바(넓게보면 많은 프로그래밍 언어)에서 논리적으로 자료를 동적 크기 공간에 저장할 수 있는 클래스를 묶는 이름이다. 제발 주의!!

기본 개념들

컨테이너는 다음과 같은 두 개의 서로 다른 개념으로 나뉜다.

Collection Map
하나 이상의 규칙이 적용되는 개별적인 요소들을 모아 놓은 것이다. 대표적으로 List, Set, Queue가 있다. List는 객체를 순서있게 저장하고 Set은 순서와 상관없이 중복요소를 제거하여 저장한다. Queue는 사용자가 정한 순서에 의해 객체를 저장한다. Key와 그에 대응되는 Value의 쌍으로 구성되는 객체들을 모아 놓은 것으로 key를 사용하여 값을 검색할 수 있다. 객체 저장에 순서를 가지지 않고 Key에 유일성을 부여한다.

이런 클래스들을 왜 사용해야 하는 거지?

JDK에서는 자료를 저장하기 위해 Container 성질을 가진 Collection과 Map 인터페이스의 사용을 권장하고 있다. 왜? 기본적인 질문이니 간략하게 서술하고 넘어가겠다.

1. API의 일관성

Collection, 또는 Map에 일관된 API를 사용하여 하위 클래스에서는 모두 상속받은 통일된 이름의, 효과의 메서드를 사용할 수 있다.

2. 프로그래밍 노력 감소

OOP의 성질 중 하나인 추상화의 기본 개념이 성공적으로 구현되어 있고 그 안정성마저 보장되어 있다.

3. 크기의 동적 변화

컨테이너를 쓰는 가장 큰 이유중 하나인 ‘크기를 지정할 필요가 없다.’라는 강점이 있다.

댓글