개념(일반 프로그래밍)

Concept (generic programming)

일반 프로그래밍에서 개념은 구문 및 의미론을 포함하여 유형에 대해 지원되는 연산을 설명하는 것이다.이런 식으로 개념은 추상적 형식과 관련되지만 개념은 하위 유형 관계를 필요로 하지 않는다.

언어 사용

STL은 템플리트를 광범위하게 사용한 최초의 라이브러리 중 하나였기 때문에 이 용어가 1998년 초에 사용되었다.[1]개념(그리고 그것의 대중화)이라는 용어는 STL의 일차 [2][3]디자이너인 알렉산더 스테파노프에게 기인한다.

C++ 1998 표준에서 개념 용어는 특정 유형의 요구사항에 대한 단순한 설명으로, 일반적으로 템플릿 매개 변수가 되는 명칭으로 도입되었다.그것은 언어로 명시적으로 암호화되지 않았다 – 개념은 오직 그 유형의 개체에 대해 시도되는 작업과 올바르게 컴파일될 것으로 예상되는 작업(즉, 정확하게 컴파일하기 위해)에 의해서만 표현되었다.C++11에서는 "준비되지 않았다"고 거부당했지만, 명시적 언어 특징으로 개념을 추가하자는 제안이 있었다.C++20은 결국 정교한 개념 설계를 받아들였다.

자바C#의 제네릭은 C++의 템플릿과 어느 정도 유사성이 있기 때문에, 그곳의 개념의 역할은 인터페이스에 의해 이루어진다.그러나, 개념과 인터페이스 사이에는 한가지 중요한 차이가 있다: 특정 인터페이스를 구현하기 위해 템플릿 매개변수가 필요한 경우, 매칭 타입은 오직 그 인터페이스를 구현(명확히)하는 클래스일 수 있다.개념은 다음과 같은 두 가지 방법으로 충족될 수 있기 때문에 더 많은 유연성을 가져온다.

  • 개념 맵을 사용하여 만족으로 명시적으로 정의됨(인터페이스와 달리 유형 자체에 별도로 정의됨)
  • "자동 개념"에 대해 암묵적으로 정의되며, 이 개념은 이 용도로 미리 정해지지 않은 형식 및 기타 형식에도 사용될 수 있다.

그러나 C# 언어는 사용된 형식이 정의된 인터페이스를 명시적으로 구현할 필요가 없고, 각각의 패턴을 일치시키기만 하면 되는 몇 가지 구조를 가지고 있다(단, 이러한 패턴을 개념이라고 부르지 않는다).예: 반복문은 적절한 형태를 구현하는 한, 반복된 개체가 어떤 유형이든 될 수 있도록 허용한다.GetEnumeratormethod.[4] (과 비교해서using자원이 구현해야 하는 문장System.IDisposable인터페이스).[5]

개념과 매우 유사한 것을 구현하는 또 다른 언어는 Haskell인데, 여기서 그 특징을 유형 클래스라고 부른다.


예를 들어, 유형인 경우IC++의 Trivial Iterator 개념을 만족시키고i형식이다.I, 해당하는 의미론을 가진 유효한 표현은 다음과 같다.[6]

  • I i부도 공사
  • *i어떤 타입으로 바꿀 수 있어야 한다.T.
  • i->m다음에 유효하다(*i).m이다

참고 항목

참조

  1. ^ Austern, M.H. 일반 프로그래밍STL: C++ Standard Template Library 사용확장 1998. 페이지 17–18
  2. ^ Bjarne Stroustrup, 2016년 2월 26일 Bjarne Strustrup의 개념과 C++17—Bjarne Strustrup의 약간의 배경
  3. ^ 2016년 1월 21일 비야른 스트루스트럽의 알렉스 스테파노프
  4. ^ C# 6.0 사양 초안, 포레치
  5. ^ C# 6.0 사양 초안, 사용 내역서
  6. ^ 트라비티 리터레이터

외부 링크