2020.01.31

C++ 프로그래밍에 요긴한 라이브러리 7종

Paul Krill | InfoWorld
C++ 개발자가 윈도우 앱, 모바일, 머신러닝 및 여타 앱을 개발할 때 이용할 만한 라이브러리를 정리했다. 
 
ⓒ Image Credit : Getty Images Bank

C++는 범용 시스템 프로그래밍 언어이다. 1979년 만들어진, 역사가 40년이 넘는 언어이다. 하지만 여전히 인기가 높다. 여러 프로그래밍 언어 인기 측정 지수에서 상위권에 속한다.

C++가 널리 사용되는 이유 중 하나는 여러 다양한 IDE와 에디터, 컴파일러, 테스트 프레임워크, 코드 품질 도구 등 수많은 도구가 이 언어를 지원하고 있기 때문이다. 또한, 소프트웨어 개발자의 C++ 애플리케이션 개발에 도움을 주는 훌륭한 라이브러리들이 많다. 이 가운데 7가지를 소개한다. 

Active Template Library
마이크로소프트의 Active Template Library는 이중 인터페이스, 표준 COM 열거자 인터페이스, 연결점, ActiveX 컨트롤 같은 COM 기능을 지원하는 COM(Common Object Model) 개체를 구현할 수 있는 C++ 클래스 세트이다. Visual Studio IDE에서 지원하는 ATL을 사용해 단일 스레드 개체, 아파트 모델 개체, 빈 스레드 모델 개체, 빈 스레드와 아파트 모델 개체를 만들 수 있다.

Asio C++ 라이브러리
Asio C++ 라이브러리는 견고한 비동기화 모델을 제공하며, 네트워크 및 저수준 I/O 프로그래밍에 사용된다. Aiso는 동시성 모델과 C++ 네트워킹, 기타 종류의 I/O에 필요한 기본 구성요소를 제공하며, 스마트폰 앱과 게임부터 고수준의 인터랙티브 웹사이트, 실시간 트랜젝션 시스템 같은 애플리케이션에도 사용되고 있다. 

Asio를 사용하는 프로젝트로는 WebSocketPP 라이브러리 및 Lua 언어용 DDT3 원격 디버거를 예로 들 수 있다. 또한, Boost Software License 아래 무료 오픈소스로 사용할 수 있으며, 리눅스와 윈도우, 맥OS, 프리BSD에서도 지원을 한다.

Eigen
Eigen은 행렬과 벡터, 숫자 해결사, 관련 알고리즘 등 선형 대수용 C++ 템플릿 라이브러리이다. 작은 고정 행렬부터 임의의 크고 밀집된 행렬까지 모든 행렬 크기를 지원한다. 알고리즘은 신뢰성을 위해 선택된다. 모든 표준 숫자 형식을 지원한다. 속도의 경우, Eigen은 지능적으로 임시 항목을 제거하고, 지연 연산을 구현하는 표현 템플릿을 지원한다. 

Mozilla Public License 2 아래 무료로 사용할 수 있으며, Eigen 프로젝트 페이지에서 다운로드 받을 수 있는 Eigen은 C++ 프로그래머에게 자연스럽게 명확히 설명되는 API를 지원한다. Eigen 테스트 스윗은 많은 컴파일러를 통해 신뢰성이 확보되어 있다.

FloatX
FloatX(Float eXtended)는 낮은 정밀도의 부동 소수점 형식 에뮬레이션에 사용되는 헤더 전용 라이브러리이다. FloatX는 기본적으로 C++ 컴파일러와 호환되지만, 파이썬(Python)이나 포트란(Fortran) 같은 다른 언어로도 호출할 수 있다. 부동 소수점 형식은 단일 또는 이중 정밀도 형식 이상으로 확장된다. 사용자가 지수와 부동 소수점 숫자의 상당 부분에 사용하는 비트 숫자를 선택할 수 있는 템플릿 종류가 제공된다. 

FloatX는 정밀도를 축소한 부동 형식 에뮬레이션용 FlexFloat 라이브러리 개념에 토대를 두고 있지만, C에서 FlexFloat 기능 슈퍼세트를 지원하며, C++ 래퍼를 제공한다. FloatX는 Open Transprecision Computing 이니셔티브를 통해 만들어졌다. Apache License 2.0 아래 무료로 사용 가능하다. 

OpenCV
OpenCV(Open Source Computer Vision Library)는 C++로 작성되었으며, BSD 라이선스 아래 사용할 수 있는 컴퓨터 비전 및 머신 러닝 라이브러리이다. OpenCV는 컴퓨터 비전 애플리케이션에 공통 인프라를 제공하고, 커머셜 상품에서 머신 인지 기능 사용에 박차를 가하기 위한 목적에서 만들어졌다. 

4만 7,000명 이상이 참여하고 있는 사용자 커뮤니티에서 2,500여 알고리즘을 입수할 수 있다. 얼굴 인식, 개체 감지 및 분류, 3D 모델 추출, 이미지 검색 등에 이용할 수 있는 알고리즘들이다. OpenCV 프로젝트 웹사이트에서 다운로드할 수 있는 라이브러리는 C++, Java, Python, Matlab 인터페이스를 제공하고, 윈도우와 리눅스, 안드로이드, 맥OS를 지원한다. CUDA 및 OpenCL 인터페이스도 개발되고 있다.

Poco C++ 라이브러리
C++ 개발을 단순화시키기 위해 만들어진 Poco (Portable Components) C++ 라이브러리는 여러 플랫폼을 지원하며, 데스크톱부터 서버, 모바일, IoT 장치까지 다양한 시스템에서 실행되는 인터넷 및 네트워크 애플리케이션을 구현할 수 있는 C++ 라이브러리이다. 또 머신러닝이나 데이터 분석용 REST API와 함께 마이크로서비스를 빌드할 수도 있다. Poco 라이브러리는 Java Class 라이브러리, 마이크로소프트 .NET Framework, 애플 Cocoa와 개념이 비슷하다.

또한, 개발자는 Poco 라이브러리를 이용해 SQL 데이터베이스, Redis, MongoDB와 대화하는 C++ 언어의 애플리케이션 서버, 클라우드 백엔드와 대화하는 IoT 장치용 소프트웨어를 빌드할 수 있다. 캐스 프레임워크, HTML 양식 처리, 파일 전송용 FTP 클라이언트, HTTP 서버 및 클라우드 등의 기능을 지원한다. GitHub에서 다운로드할 수 있는 Poco 라이브러리는 Boost Software License 아래 무료로 사용할 수 있다. 

Windows Template Library
최초 마이크로소프트가 만든 Windows Template Library는 2004년에 가벼운 윈도우 애플리케이션과 UI 구성요소를 구현할 수 있는 오픈소스 라이브러리가 되었다. Microsoft Foundation Classes 툴킷의 대안으로 포지셔닝 된 WTL은 ATL을 확장하고, 컨트롤과 대화, 프레임 윈도우, GDI 개체용 클래스 세트를 제공한다. ciokr@idg.co.kr



2020.01.31

C++ 프로그래밍에 요긴한 라이브러리 7종

Paul Krill | InfoWorld
C++ 개발자가 윈도우 앱, 모바일, 머신러닝 및 여타 앱을 개발할 때 이용할 만한 라이브러리를 정리했다. 
 
ⓒ Image Credit : Getty Images Bank

C++는 범용 시스템 프로그래밍 언어이다. 1979년 만들어진, 역사가 40년이 넘는 언어이다. 하지만 여전히 인기가 높다. 여러 프로그래밍 언어 인기 측정 지수에서 상위권에 속한다.

C++가 널리 사용되는 이유 중 하나는 여러 다양한 IDE와 에디터, 컴파일러, 테스트 프레임워크, 코드 품질 도구 등 수많은 도구가 이 언어를 지원하고 있기 때문이다. 또한, 소프트웨어 개발자의 C++ 애플리케이션 개발에 도움을 주는 훌륭한 라이브러리들이 많다. 이 가운데 7가지를 소개한다. 

Active Template Library
마이크로소프트의 Active Template Library는 이중 인터페이스, 표준 COM 열거자 인터페이스, 연결점, ActiveX 컨트롤 같은 COM 기능을 지원하는 COM(Common Object Model) 개체를 구현할 수 있는 C++ 클래스 세트이다. Visual Studio IDE에서 지원하는 ATL을 사용해 단일 스레드 개체, 아파트 모델 개체, 빈 스레드 모델 개체, 빈 스레드와 아파트 모델 개체를 만들 수 있다.

Asio C++ 라이브러리
Asio C++ 라이브러리는 견고한 비동기화 모델을 제공하며, 네트워크 및 저수준 I/O 프로그래밍에 사용된다. Aiso는 동시성 모델과 C++ 네트워킹, 기타 종류의 I/O에 필요한 기본 구성요소를 제공하며, 스마트폰 앱과 게임부터 고수준의 인터랙티브 웹사이트, 실시간 트랜젝션 시스템 같은 애플리케이션에도 사용되고 있다. 

Asio를 사용하는 프로젝트로는 WebSocketPP 라이브러리 및 Lua 언어용 DDT3 원격 디버거를 예로 들 수 있다. 또한, Boost Software License 아래 무료 오픈소스로 사용할 수 있으며, 리눅스와 윈도우, 맥OS, 프리BSD에서도 지원을 한다.

Eigen
Eigen은 행렬과 벡터, 숫자 해결사, 관련 알고리즘 등 선형 대수용 C++ 템플릿 라이브러리이다. 작은 고정 행렬부터 임의의 크고 밀집된 행렬까지 모든 행렬 크기를 지원한다. 알고리즘은 신뢰성을 위해 선택된다. 모든 표준 숫자 형식을 지원한다. 속도의 경우, Eigen은 지능적으로 임시 항목을 제거하고, 지연 연산을 구현하는 표현 템플릿을 지원한다. 

Mozilla Public License 2 아래 무료로 사용할 수 있으며, Eigen 프로젝트 페이지에서 다운로드 받을 수 있는 Eigen은 C++ 프로그래머에게 자연스럽게 명확히 설명되는 API를 지원한다. Eigen 테스트 스윗은 많은 컴파일러를 통해 신뢰성이 확보되어 있다.

FloatX
FloatX(Float eXtended)는 낮은 정밀도의 부동 소수점 형식 에뮬레이션에 사용되는 헤더 전용 라이브러리이다. FloatX는 기본적으로 C++ 컴파일러와 호환되지만, 파이썬(Python)이나 포트란(Fortran) 같은 다른 언어로도 호출할 수 있다. 부동 소수점 형식은 단일 또는 이중 정밀도 형식 이상으로 확장된다. 사용자가 지수와 부동 소수점 숫자의 상당 부분에 사용하는 비트 숫자를 선택할 수 있는 템플릿 종류가 제공된다. 

FloatX는 정밀도를 축소한 부동 형식 에뮬레이션용 FlexFloat 라이브러리 개념에 토대를 두고 있지만, C에서 FlexFloat 기능 슈퍼세트를 지원하며, C++ 래퍼를 제공한다. FloatX는 Open Transprecision Computing 이니셔티브를 통해 만들어졌다. Apache License 2.0 아래 무료로 사용 가능하다. 

OpenCV
OpenCV(Open Source Computer Vision Library)는 C++로 작성되었으며, BSD 라이선스 아래 사용할 수 있는 컴퓨터 비전 및 머신 러닝 라이브러리이다. OpenCV는 컴퓨터 비전 애플리케이션에 공통 인프라를 제공하고, 커머셜 상품에서 머신 인지 기능 사용에 박차를 가하기 위한 목적에서 만들어졌다. 

4만 7,000명 이상이 참여하고 있는 사용자 커뮤니티에서 2,500여 알고리즘을 입수할 수 있다. 얼굴 인식, 개체 감지 및 분류, 3D 모델 추출, 이미지 검색 등에 이용할 수 있는 알고리즘들이다. OpenCV 프로젝트 웹사이트에서 다운로드할 수 있는 라이브러리는 C++, Java, Python, Matlab 인터페이스를 제공하고, 윈도우와 리눅스, 안드로이드, 맥OS를 지원한다. CUDA 및 OpenCL 인터페이스도 개발되고 있다.

Poco C++ 라이브러리
C++ 개발을 단순화시키기 위해 만들어진 Poco (Portable Components) C++ 라이브러리는 여러 플랫폼을 지원하며, 데스크톱부터 서버, 모바일, IoT 장치까지 다양한 시스템에서 실행되는 인터넷 및 네트워크 애플리케이션을 구현할 수 있는 C++ 라이브러리이다. 또 머신러닝이나 데이터 분석용 REST API와 함께 마이크로서비스를 빌드할 수도 있다. Poco 라이브러리는 Java Class 라이브러리, 마이크로소프트 .NET Framework, 애플 Cocoa와 개념이 비슷하다.

또한, 개발자는 Poco 라이브러리를 이용해 SQL 데이터베이스, Redis, MongoDB와 대화하는 C++ 언어의 애플리케이션 서버, 클라우드 백엔드와 대화하는 IoT 장치용 소프트웨어를 빌드할 수 있다. 캐스 프레임워크, HTML 양식 처리, 파일 전송용 FTP 클라이언트, HTTP 서버 및 클라우드 등의 기능을 지원한다. GitHub에서 다운로드할 수 있는 Poco 라이브러리는 Boost Software License 아래 무료로 사용할 수 있다. 

Windows Template Library
최초 마이크로소프트가 만든 Windows Template Library는 2004년에 가벼운 윈도우 애플리케이션과 UI 구성요소를 구현할 수 있는 오픈소스 라이브러리가 되었다. Microsoft Foundation Classes 툴킷의 대안으로 포지셔닝 된 WTL은 ATL을 확장하고, 컨트롤과 대화, 프레임 윈도우, GDI 개체용 클래스 세트를 제공한다. ciokr@idg.co.kr

X