Главная Новости Галерея Вопросы Библиотека Контакты

제네릭 프로그래밍 예제

제네릭 클래스는 원래의 방법과 언어 디자인 이후 에펠의 일부였습니다. 에펠의 기초 간행물[21][22] 제네릭 클래스의 생성 및 사용을 설명하기 위해 용어 일반성을 사용합니다. 이것은 부스트 라이브러리에 사용되는 몇 가지 일반적인 프로그래밍 기술에 대한 불완전한 조사입니다. 제네릭은 코드를 리팩터링 할 때 유용하며 데이터 구조에서 데이터 형식을 추상화 할 수있는 코드의 인스턴스를 볼 수 있습니까? 유용한 것을 놓친 적습니까? 추가할 추가 기능이 있습니까? 제네릭을 흥미로운 방법으로 사용했습니까? 그렇다면 아래를 공유하십시오! 예를 들어, 제네릭 하스켈:[28] JObject가 아닌 사람 클래스를 만들면 제네릭에 대한 제네릭스택() 지원 또는 «컨테이너-형식-T»를 Java 프로그래밍에 추가할 수 있다고 상상해 보십시오. J2SE 5.0의 일환으로 2004년에 언어를 사용했습니다. Java에서 제네릭은 형식 정확성에 대한 컴파일 타임에만 검사됩니다. 그런 다음 형식 지우기라는 프로세스를 통해 제네릭 형식 정보가 제거되어 이전 JVM 구현과의 호환성을 유지하여 런타임에 사용할 수 없게 됩니다. 예를 들어 목록 원시 유형 목록으로 변환됩니다. 컴파일러는 목록에서 요소를 검색할 때 요소를 String 유형으로 변환하기 위해 형식 캐스트를 삽입하여 C++ 템플릿과 같은 다른 구현에 비해 성능을 저하시킵니다. 일반 프로그래밍은 알고리즘이 지정될 이후의 형식에 따라 작성되는 컴퓨터 프로그래밍 스타일이며 매개 변수로 제공되는 특정 형식에 필요할 때 인스턴스화됩니다. 1973년에 ML에 의해 개척된 이 접근 방식은 일반적인 함수 나 형식을 작성할 수 있게 해 주며, 사용 시 작동하는 형식 집합에서만 다른 공통 함수 나 형식을 작성하여 중복을 줄일 수 있습니다. 이러한 소프트웨어 엔터티는 파이썬, 아다, C#, 델파이, 에펠, F#, 자바, Rust, Swift, TypeScript 및 Visual Basic .NET의 제네릭으로 알려져 있습니다. 그들은 ML에서 파라 메트릭 다형성으로 알려져있다, 스칼라, 하스켈 (하스켈 커뮤니티는 또한 용어를 사용 «일반» 관련하지만 다소 다른 개념) 및 줄리아; C++ 및 D의 템플릿; 영향력있는 1994 책 디자인 패턴의 매개 변수화 된 유형.

[3] Stepanov 에 이어 언어 기능을 언급하지 않고 일반 프로그래밍을 정의할 수 있습니다: 구체적인 예에서 가장 일반적이고 추상적인 형태로 알고리즘과 데이터 구조를 들어 올립니다. 제네릭은 템플릿을 사용하여 C++에서 구현할 수 있습니다. 템플릿은 C ++에서 간단하면서도 매우 강력한 도구입니다. 간단한 아이디어는 데이터 형식을 매개 변수로 전달하여 다른 데이터 형식에 대해 동일한 코드를 작성할 필요가 없도록 하는 것입니다. 예를 들어 소프트웨어 회사는 서로 다른 데이터 형식에 대해 sort()가 필요할 수 있습니다. 여러 코드를 작성하고 유지 관리하는 대신 하나의 sort()를 작성하고 데이터 형식을 매개 변수로 전달할 수 있습니다. 일반 프로그래밍 패러다임은 소프트웨어 분해에 대한 접근 방식이며, 이에 따라 형식에 대한 기본 요구 사항은 알고리즘 및 데이터 구조의 구체적인 예에서 추상화되고 개념으로 공식화되어 추상화와 유사합니다. 추상 대수의 대수 이론. [6] 이 프로그래밍 접근법의 초기 예는 Scheme 및 Ada에서 구현되었으며[7] 가장 잘 알려진 예는 표준 템플릿 라이브러리(STL)이지만[8][9] 서열 데이터 구조와 알고리즘이 작동합니다. 이를 반복기는 일종의 IIterator 인터페이스에서 상속하여 반복기임을 «증명»해야 하는 기존의 개체 지향 프로그래밍과 비교합니다. 이렇게 하면 원시 포인터를 이터레이터로 사용하지 못하게 되므로 일반성을 잃게 됩니다.

위에서 사용하는 C++ 템플릿 구문은 프로그래머와 언어 디자이너 사이에서 개념을 대중화하고 많은 일반 프로그래밍 숙어를 지원하는 일반성 구문으로 널리 인용됩니다. 또한 D 프로그래밍 언어는 C++ 선례를 기반으로 하지만 간소화된 구문을 기반으로 완전히 제네릭 가능한 템플릿을 제공합니다.