얼마전에 같은 주제로 꽤 장문의 글을 썼다가 홀랑 날려 먹은 탓인지 왠지 비슷한 이야기를 길게 적긴 좀 그렇네요. 개인 프로젝트 때문에 파이썬을 수박 겉핥기 수준이나마 배워서 쓰고 있는데 그 과정에서 느낀 점을 간단하게 정리해봅니다.
우선 마음에 들었던 점부터...
동적 스크립팅 언어의 최대 장점이겠지만 확실히 수정과 디버그의 주기가 매우 빠릅니다. 파이참을 IDE로 쓰고 있는데 아직 파이썬 문법에 익숙하지 않음에도 나름 경쾌한 느낌으로 코딩이 가능하더군요.
그리고 튜플이나 리스트 등 기본 자료형에 대한 조작이 꽤 강력합니다. 어쩌면 이건 파이썬의 장점보단 자바 같이 오래된 언어의 단점에 가까울지 모르겠지만, NumPy 같은 라이브러리를 사용하지 않더라도 기본 API 만으로 예컨대 자바의 List나 Map으로 할 수 있는 것에 비하면 훨씬 다양한 조작이 가능합니다.
이건 자바나 C# 같은 언어와 비교할 때 이야기할 수 있는 내용이지만, 어느 정도 다중 상속을 통해 믹스인 패턴을 구현할 수 있다는 것도 스칼라를 자주 쓰는 제 입장에선 상당히 마음에 드는 요소였습니다.
하지만 아직까지 경험한 내용 중 개인적으로 가장 마음에 들었던 건 "매직 메서드"의 존재입니다. 자바스크립트를 사용할 때 가끔 동적 언어의 특징을 활용(또는 '악용')해서 런타임에 임의의 함수나 속성을 추가한다던지 바꾸어치기 한다던지 하는 경우가 있습니다.
파이썬의 경우는 같은 동적 언어로서 역시 비슷하게 활용할 수 있을 뿐 아니라, 디스크립터나 데코레이터 등을 통해 객체의 기본 동작을 상당히 다양하게 변경할 수 있습니다.
관련 기능에 영감을 얻어서 간단한 오픈소스 라이브러리를 만드는 중인데, 아마 대부분의 다른 언어였다면 불가능했을 것 같습니다.
여기까지가 마음에 드는 점이고, 제가 익숙한 언어들에 비해 마음에 들지 않는 점도 꽤 많이 있었습니다.
우선 타이핑 문제... 이건 개발자들 사이에서도 항상 의견이 대립하는 내용이지만, 전 분명 동적 타이핑이 오히려 생산성을 갉아 먹는 경우가 있다고 생각합니다. 프로젝트 규모가 커지고 복잡도가 증가할 때는 물론이지만 반대로 처음 접하는 API의 경우 타입 정보가 없다면 파악하는데 훨씬 많은 시간이 걸리기도 합니다.
물론 파이썬의 경우 선택적으로 타입 힌트를 제공하기도 하고 클래스나 메서드 같은 경우 IDE가 어느 정도 자동 완성의 도움을 주기도 합니다.
하지만 경우에 따라서(예컨대 인자값) API가 명시적인 타이핑을 사용하지 않았다면 그런 도움을 받을 수 없는 경우가 많고, 리팩터링시 버그를 유발하는 원인이 되기도 합니다.
저는 최대한 타이핑 힌트를 활용해서 제가 작성하는 공개 API의 힌트를 넣고 있긴 한데, 스칼라 같이 매우 강력한 타입 시스템을 자랑하는 언어를 쓰다 보니, 특히 파이썬의 제너릭 시스템 같은 건 솔직히 괴랄하고 무척 불편했습니다.
타입 힌트를 넣다가 실수를 해도 멀쩡하게 코드가 돌아간다는 건, 특히 복잡한 프로젝트에선 결코 장점이 될 수 없습니다.
또 한가지 마음에 들지 않는 건, 의외로 함수형에 대한 배려가 부족하더군요. 그 보수적이라는 자바도 옵션형을 제공하는 마당에 파이썬의 경우 언어에서 비슷한 기능을 제공하지 않음은 물론 아직 쓸만한 오픈소스 대안도 찾지 못했습니다.
그나마 자바나 스칼라와 달리 C#과 같은 제너레이터(예컨대, 'yield') 함수를 제공한다는 건 평가할 만하긴 했습니다. 람다식에 대한 문법이 특별히 번잡한 건 이런 문제와 맞물려서 더 불편하게 느껴지더군요.
마지막으로 기본적으로는 인터프리터 방식의 언어다 보니 클래스나 함수의 선언 순서에 영향을 받는 경우가 있다는 점도 꽤 불편했습니다. 예컨대 타입 힌트를 사용할 때 자신과 동일한 유형을 API에 반환형이나 인자로 명시하려면 꼼수가 필요하다거나, import 순서에 따라 코드가 돌아가거나 망가질 수 있다는 점 등은 단점이라고 느꼈습니다.
그 밖에 파이썬에서 특이하게 느꼈던 점은 '클래스 메서드'의 존재인데, 나름 쓰고는 있지만 아직은 '다르다'이외에 다른 언어에 비해 특별히 좋거나 나쁘다고 느끼진 못했습니다. 아, 하긴 클래스 속성을 정의한다거나 할 때 같은 클래스 메서드를 써야하는데 안되서 풀 네임을 붙여야 한다던지 소소하게 불편한 점을 겪긴 했네요.
파이썬 언어를 잠깐 써보면서 느낀 장단점은 이 정도인데, 이 중에서 어디까지가 진짜 파이썬의 특징이고 어디서부터 제 경험 부족으로 인한 편견인지 모르겠습니다.
한 일 년 정도 써보면 아마 보다 객관적인 평가를 내릴 수 있지 않을까 싶습니다. 지금 시점에서 드는 생각은 "자바스크립트를 쓸만한 작업엔 대신 쓰고 싶은 언어"라는 정도입니다. 대략 'JavaScript on steroids' 정도 느낌이랄까요...
덧글 : 이번에도 등록 버튼을 누르니 홀랑 날아가 버렸습니다. 파이썬과 무슨 악연이 있는 것인지... 다행히 누르기 전 뭔가 쎄한 기분이 들어 복사를 해놓아서 복구했습니다. 그런데 간단하게 적겠다고 했는데 쓰고 보니 나름 장문의 글이 되었군요.