C++는 오랜 시간 동안 강력한 객체 지향 프로그래밍(OOP) 언어로 알려져 왔지만, 최근 몇 년 사이에는 함수형 프로그래밍(FP) 패러다임도 점점 더 지원하고 있습니다. C++17과 C++20에서의 주요 차이점을 중심으로 OOP와 FP의 차이를 설명하겠습니다:
### C++17에서의 OOP와 FP 지원
**객체 지향 프로그래밍 (OOP)**:
- **클래스와 객체**: 클래스 정의와 객체 생성은 C++의 핵심입니다. C++17에서도 여전히 강력한 클래스 및 객체 모델을 제공합니다.
- **상속**: 기반 클래스와 파생 클래스 간의 상속 관계를 정의할 수 있습니다.
- **다형성**: 가상 함수와 다형성을 통해 런타임에 다른 동작을 실현할 수 있습니다.
- **캡슐화**: 접근 지정자(public, protected, private)를 통해 데이터와 메소드를 캡슐화할 수 있습니다.
**함수형 프로그래밍 (FP)**:
- **람다 표현식**: C++11부터 도입된 람다 표현식은 C++17에서도 여전히 많이 사용되고, 기존의 함수 객체보다 간결하게 함수를 정의할 수 있습니다.
- **std::function**: 일반적인 함수 포인터보다 더 강력한 타입 안전성을 제공합니다.
- **컨스탠트 표현식 (const-expressions)**: `constexpr` 키워드는 불변성을 강조하는데 사용됩니다.
### C++20에서의 OOP와 FP 지원
**객체 지향 프로그래밍 (OOP)**:
- **Concepts**: 개념을 사용하여 템플릿에서 조건을 검증하고 보다 향상된 타입 안정성을 제공할 수 있습니다.
- **범용 멤버 및 비멤버 함수 템플릿**: 더욱 유연한 템플릿 프로그래밍이 가능해졌습니다.
**함수형 프로그래밍 (FP)**:
- **Ranges 라이브러리**: 표준 라이브러리에 포함된 Ranges는 FP 스타일의 데이터 처리와 관리를 간단하고 직관적으로 할 수 있게 합니다. 이 라이브러리는 연속적인 데이터 조작 및 필터링을 FP 스타일로 구현할 수 있도록 합니다.
- **Coroutines**: 비동기 프로그래밍을 단순화하고, 다른 함수 실행을 일시 중단하고 나중에 재개할 수 있는데 이는 FP 프레임워크에서 흔히 사용하는 기반 기술입니다.
- **Concepts**: 템플릿 메타프로그래밍 패러다임에 대해 보다 강력한 지원을 제공하며, 이는 함수형 프로그래밍에서도 폭넓게 사용됩니다.
- **Constexpr의 개선**: C++20에서는 보다 복잡한 함수와 루프 내부에서도 `constexpr`를 사용할 수 있게 되어, 컴파일 타임에 더 많은 계산을 할 수 있습니다.
### 요약
**C++17**:
- OOP: 클래스와 객체, 상속, 다형성, 캡슐화 등.
- FP: 람다 표현식, std::function, `constexpr`.
**C++20**:
- OOP: Concepts 도입으로 템플릿 프로그래밍 강화, 범용 템플릿 지원.
- FP: Ranges 라이브러리, Coroutines, 개선된 `constexpr`, Concepts.
C++20은 특히 함수형 프로그래밍 패러다임에 더 많은 도구와 기능을 추가하여 프로그래머가 FP 스타일의 코딩을 더 쉽게 할 수 있도록 했습니다. 반면에 객체 지향 프로그래밍의 경우 기존의 메커니즘을 유지하면서도 템플릿 메타프로그래밍과 같은 고급 기능을 강화하여 더욱 안정적으로 만들었습니다.
'C++' 카테고리의 다른 글
시스템콜 (0) | 2019.01.30 |
---|---|
귀납 추론과 프로그래밍 (0) | 2019.01.30 |
바이너리 연결 기술 (0) | 2019.01.27 |
Python과 C++을 연결하는 방법 (0) | 2019.01.26 |
COM(Component Object Model) 개요 및 python 통합 고려. (6) | 2019.01.06 |
최근댓글