본문 바로가기
C++

C++

by Doromi 2019. 5. 5.
728x90
반응형

일반화 프로그래밍(generic programming)

C++이 가지는 프로그래밍 언어로서의 특징 중 하나로 일반화 프로그래밍을 들 수 있다.
일반화 프로그래밍은 데이터를 중시하는 객체 지향 프로그래밍과는 달리 프로그램의 알고리즘에 그 중점을 둔다.
이러한 일반화 프로그래밍을 지원하는 C++의 대표적인 기능 중 하나가 템플릿이다.

 

 

 

 

템플릿(template)

매개변수의 타입에 따라 함수나 클래스를 생성하는 매커니즘
타입이 매개변수에 의해 표현되므로, 매개변수화 타입이라고도 불린다.

 

템플릿을 사용하면 타입마다 별도의 함수나 클래스를 만들지 않고, 여러 타입에서 동작할 수 있는 단 하나의 함수나 클래스를 작성하는 것이 가능하다.


 

 

함수 템플릿(function template)

함수의 일반화된 선언을 의미한다.
함수 템플릿을 사용하면 같은 알고리즘을 기반으로 하면서,

서로 다른 타입에서 동작하는 함수를 한 번에 정의할 수 있다.
임의의 타입으로 작성된 함수에 특정 타입을 매개변수로 전달하면,

C++컴파일러는 해당 타입에 맞는 함수를 생성해준다.

 

 

template <typename 타입이름>

함수의 원형

{

    // 함수의 본체

}

이렇게 정의된 함수 템플릿을 호출할 때 매개변수로 int형을 전달하면,
함수의 원형과 본체에서 정의된 타입 이름은 모두 int형으로 바뀌게 된다.

 

 

 

클래스 템플릿(class template)

클래스의 일반화된 선언을 의미한다.
함수 템플릿과 동작은 같으며, 그 대상이 함수가 아닌 클래스라는 점만 다르다.


 

 

스마트 포인터(smart pointer)

new 키워드를 사용하여 동적으로 할당받은 메모리는, 반드시 delete 키워드를 사용하여 해제해야 한다.
메모리 누수로부터 프로그램의 안전성을 보장하기 위해 스마트 포인터를 제공하고 있다.

스마트 포인터란 포인터처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해준다.

 

 

스마트 포인터의 동작

보통 new 키워드를 사용해 기본 포인터가 실제 메모리를 가리키도록 초기화한 후에,
기본 포인터를 스마트 포인터에 대입하여 사용한다.

 

 

스마트 포인터의 종류

  1. unique_ptr

    unique_ptr<Person> hong = make_unique<Person>("길동"29);

    unique_ptr 인스턴스인 hong은 일반 포인터와는 달리 사용이 끝난 후에 delete 키워드를 사용하여 메모리를 해제할 필요가 없다.


 

728x90
반응형

'C++' 카테고리의 다른 글

C++  (0) 2019.05.04
C++  (0) 2019.05.04
C++  (0) 2019.05.04
C++  (0) 2019.05.04
C++  (0) 2019.05.04