필자는 python이 dynamic typing language라는 특징이 좋아보였으나

직접 사용해보니 함수의 파라미터 타입 때문에 자꾸 에러가 나고 고치기는 힘들어서

C, C++, Java를 사용해왔다


그런데 이번에 NAVER CAMPUS HACK DAY를 다녀온다음에 생각이 바뀌었다

프로젝트 내용은 python ctypes library를 사용하여 C library module을 call하는 client를 개발하는 것이었는데, 이 때 느낀 것이 python ctypes의 강력한 C Portability였기 때문이다


자세히 말해, python은 다른 언어들에 비해 C 라이브러리 함수 call이 쉽다

python은 C언어로 구현된 라이브러리를, 그대로, 간단하게 사용할 수 있다는 의미이다 (Java보다 훨씬)

그 예로 Caffe, Caffe2, Tensorflow 등 매우 많은 프레임워크/라이브러리에서 python binding을 제공해준다

정리하여 python의 C Library의 함수 call이 굉장히 쉽다는 점은 가장 큰 장점이자 python을 써야하는 이유라고까지 할수있다

이제 python의 특징을 다른 언어들과 비교해보자

필자가 자주 사용하는 언어들과 주관적으로 비교해보았다


C언어
pro: high performance
con: low productivity

Raspberry Pi나 아두이노같은 Embedded programming이 아니면 C언어는 낮은 생산성 때문에 쓰기 힘들다


C++

멀티-패러다임 언어

중간 성능, 중간 생산성(난이도)

멀티-패러다임 언어라서 가장 자유로운 언어라고 할수있다.

하지만 애매하다. 성능을 원한다면 C언어 / 생산성을 원한다면 Java가 낫다
그리고 자유로운만큼 에러 디버깅이 힘드므로 (예를들면 segmentation fault) 생산성은 중간
성능이 부족할 일은 웬만하면 없으므로 필자는 편리함을 보고 Java로 넘어갔다


Java
pro: high productivity, platform-independent
con: low performance, JNI
OOP 패러다임 언어

생산성이 높고, OS 플랫폼에 독립적이며, 비교적 성능은 낮지만 웬만하면 문제가 되지 않으며, 
성능이 필요하면 JNI를 통해 C언어와 연동하면 된다.

JNI를 사용하는 또다른 이유, C로 이미 구현한 함수를 Java에서 사용할수 있다는 것이지만 JNI 사용법이 까다롭기 때문에 그냥 Java로 porting해서 사용했다


결론적으로 python은 Java의 특징들을 모두 가지면서 C로 구현된 라이브러리를 훨씬 쉽게 호출할 수 있다!

이외에도 python은 여러가지 장점들이 있다
* 가장 큰 장점인 C portability (ctypes)
* 코드가 짧다는 점
* 가독성 좋은 문법
* 방대한 라이브러리 (beautifulsoup4, numpy 등)


python도 dynamic typing 등 불편한 점이 없진 않지만, 적응하면 오히려 편리할 것 같고
Caffe2를 공부해보니, 앞으로 python은 계속 쓰게될것 같아서 평소에 미리 익숙해져 있어야겠다




WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/