본문 바로가기

STL

(12)
[C++] STL - STL 구성 요소 STL 구성 요소에는 컨테이너, 반복자, 알고리즘이 존재한다. 컨테이너(container) 컨테이너는 같은 타입의 여러 객체를 저장하는 객체로 일종의 객체들의 집합이라고 할 수 있다. 컨테이너는 클래스 템플릿으로 작성되어 있어 컨테이너 변수를 생성할 때 템플릿 인자로 요소의 타입을 명시해야 한다. 따라서 대입할 수 있는 타입의 객체만을 저장해야하며 복사 생성 또한 가능하다. 또한 요소의 추가 및 제거를 포함해 다양한 기능을 수행하는 멤버 함수가 존재한다. 컨테이너 종류 종류 설명 컨테이너 시퀀스 컨테이너 특별한 규칙이 없는 일반적인 컨테이너. 순서가 있는 선형 구조 vector, deque, list, forward_list 연관 컨테이너 특정 규칙에 의해서 자동으로 정렬, 저장, 관리하는 컨테이너. 순..
[C++] STL - 스마트 포인터(smart pointer) 스마트 포인터(smart pointer) 자바의 경우 garbage collector을 통해 메모리를 관리하지만 C++은 사용자가 스스로 메모리를 할당 해제를 통해 관리해야 한다. c에선는 malloc, free로 메모리를 할당 및 해제하고 C++은 new, delete를 사용한다. 이때 할당받은 메모리를 해제하지 않을 경우 프로그램은 계속 사용하고 있는 메모리로 인지하고 해당 메모리를 사용하지 않는 메모리 누수(memory leak)가 발생한다. 이와 같은 메모리 누수를 방지하기 위해 스마트 포인터를 제공한다. 스마트 포인터는 포인터처럼 사용하는 클래스 템플릿으로 메모리를 자동으로 해제해준다. 즉, delete를 자동으로 수행한다. 이런 SmartPtr 클래스를 사용하면 객체의 사용이 끝나면 자동으로 ..
[C++] STL - 클래스 템플릿(class template) 클래스 템플릿(class template) 함수 템플릿은 기능만 정의되고 타입이 정의되지 않은 함수의 일반화였다. 클래스 템플릿(class template)도 마찬가지로 클래스의 일반화이다. 함수 템플릿과 다른 점이 있다면 함수의 경우 명시적으로 템플릿 인수를 작성하지 않아도 동작했지만 클래스 템플릿은 무조건 템플릿 인수를 명시해주어야 한다. 이유는 클래스의 객체를 생성하는 과정에 있다. 인스턴스화를 진행할 때 해당 객체에 대한 메모리를 할당하고 생성자를 호출하게 된다. 하지만 클래스 템플릿의 데이터 타입이 결정되려면 생성자가 호출되어야 한다. 따라서 명시적으로 템플릿 인수를 작성하지 않을 경우 어떤 타입에 대한 메모리를 할당해야 하는지 모르기 때문에 객체를 생성할 수 없기 때문에 객체 생성 시 템플릿 ..
[C++] STL - 함수 템플릿(function template) 템플릿(template) template 이란 '어떤 모양을 만들 때 사용하기 위한 틀'이라는 뜻이다. 언뜻 들으면 다양한 클래스의 상속을 위해 작성되는 추상 클래스와 비슷하다고 생각할 수 있지만 추상 클래스와는 다른 특징을 가지고 있다. 템플릿은 기능은 이미 결정되어 있지만 데이터 타입이 결정되어 있지 않다. 즉, 매개변수의 타입에 따라 함수나 클래스를 생성하는 메커니즘이다. 매개변수에 따라 타입이 표현되어 매개변수화 타입(parameterized type)이라고 불리기도 한다. 추상 클래스를 이용한 상속이 동일 매개변수에 대해 기능의 변경이나 확장이 가능했다면 템플릿은 동일한 기능을 다양한 매개변수에서 사용할 수 있게 일반화하는 것이다. 함수 템플릿 함수 템플릿은 함수를 기반으로 만든 템플릿으로 함수..