본문으로 이동

컨테이너 (추상 자료형)

위키백과, 우리 모두의 백과사전.

컴퓨터 과학에서 컨테이너(container)는 다른 객체들의 클래스 또는 자료 구조[1][2]의 인스턴스이다. 즉, 특정 접근 규칙을 따르는 조직화된 방식으로 객체를 저장한다.

컨테이너의 크기는 컨테이너가 포함하는 객체(요소)의 수에 따라 달라진다. 다양한 컨테이너 유형의 하위(상속된) 구현은 크기, 복잡성 및 언어 유형에 따라 달라질 수 있지만, 많은 경우 주어진 시나리오에 맞는 올바른 구현을 선택할 수 있는 유연성을 제공한다.

컨테이너 자료 구조는 많은 종류의 프로그래밍 언어에서 흔히 사용된다.

기능 및 속성

[편집]

컨테이너는 다음 세 가지 속성으로 특징지을 수 있다.

  • 접근: 컨테이너의 객체에 접근하는 방식. 배열의 경우, 배열 인덱스로 접근한다. 스택의 경우, LIFO (후입선출) 순서에 따라 접근하고 큐의 경우, FIFO (선입선출) 순서에 따라 접근한다.
  • 저장: 컨테이너의 객체를 저장하는 방식.
  • 순회: 컨테이너의 객체를 순회하는 방식.

컨테이너 클래스는 다음을 수행하기 위한 CRUD와 유사한 메서드를 구현할 것으로 예상된다.

  • 빈 컨테이너 생성(생성자)
  • 컨테이너에 객체 삽입
  • 컨테이너에서 객체 삭제
  • 컨테이너의 모든 객체 삭제(지우기)
  • 컨테이너의 객체 접근
  • 컨테이너의 객체 수 접근(개수)

컨테이너는 때때로 반복자와 함께 구현된다.

종류

[편집]

컨테이너는 단일 값 컨테이너 또는 연관 컨테이너로 분류될 수 있다.

단일 값 컨테이너는 각 객체를 독립적으로 저장한다. 객체는 직접, 언어 루프 구조(예: For 루프) 또는 반복자로 접근할 수 있다.

연관 컨테이너는 키-값 쌍으로 구성된 연관 배열, 맵 또는 딕셔너리를 사용하며, 각 키는 컨테이너에 최대 한 번 나타난다. 키는 컨테이너에 저장되어 있는 경우 값인 객체를 찾는 데 사용된다. 연관 컨테이너는 프로그래밍 언어에서 클래스 템플릿으로 사용된다.

컨테이너 추상 자료형은 다음을 포함한다.

이러한 추상 유형을 구현하는 데 사용되는 일반적인 자료 구조는 다음을 포함한다.

그래픽 컨테이너

[편집]

위젯 툴킷은 또한 , 패널과 같은 다른 위젯을 그룹화하는 특수 위젯인 컨테이너를 사용한다. 그래픽 속성 외에도 컨테이너 클래스와 동일한 유형의 동작을 가지는데, 이는 자식 위젯 목록을 유지하고 자식 중에서 위젯을 추가, 제거 또는 검색할 수 있도록 하기 때문이다.

정적 타입 언어에서

[편집]

컨테이너 추상화는 타입 시스템에 관계없이 거의 모든 프로그래밍 언어로 작성할 수 있다.[3](p. 273) 그러나 강한 타입 객체 지향 프로그래밍 언어에서는 개발자가 재사용 가능한 동종 컨테이너를 작성하는 것이 다소 복잡할 수 있다.

요소 유형의 차이로 인해 각 요소 유형에 대한 컨테이너 컬렉션을 작성하고 유지하는 지루한 과정이 발생한다.[3]

많은 요소 유형(예: 정수 또는 부동 소수점 숫자)은 차지하는 메모리 크기와 의미론적 의미로 인해 본질적으로 서로 호환되지 않으므로 다른 컨테이너가 필요하다(물론 상호 호환되거나 변환 가능한 경우는 제외).[3] 최신 프로그래밍 언어는 이 문제를 해결하는 데 도움이 되는 다양한 접근 방식을 제공한다.[3]

범용 기본 타입
다른 어떤 타입으로든 범용적으로 할당 가능한 타입(예: 루트 객체 클래스).
다운캐스팅;
클래스 대체
위의 세 가지 접근 방식은 약한 타입 언어에 사용되며, 일반적으로 타입 간에 공유되는 상속과 다형성을 의미한다.
공용체 (C/C++ 언어)
다른 데이터 크기의 타입을 저장할 수 있다. 그러나 검색 시 공용체에 어떤 타입이 저장되어 있는지 확인하기 어렵고 신중하게 따라야 한다.
형 변환
템플릿 또는 제네릭
재사용성과 타입 안전성을 보장한다. 역상속으로 생각할 수 있다. 그러나 이 접근 방식은 템플릿 특수화를 구현해야 할 수 있는데, 타입이 메서드에서 다르다는 점을 고려할 때 시간이 많이 소요되는 과정으로 알려져 있다.[3]

같이 보기

[편집]

각주

[편집]
  1. Paul E. Black (ed.), entry for data structure in Dictionary of Algorithms and Data Structures. US National Institute of Standards and Technology.15 December 2004. Accessed 4 Oct 2011.
  2. Entry data structure in the Encyclopædia Britannica (2009) Online entry Accessed 4 Oct 2011.
  3. Budd, Timothy (1997). 《An introduction to object-oriented programming》 2판. Reading, Mass.: Addison-Wesley. ISBN 0-201-82419-1. OCLC 34788238. 

외부 링크

[편집]