WeakTyping_언어의한계

최근 몇 개월간 난 파이썬을 배우면서 소위 말하는 agile language의 매력에 푹 빠져 있었다. 몇 번 간단한 프로그램을 만들어보고 동생 숙제하는 것도 구현해보고 했는데 자바에 비해 놀랄 만큼 개발 시간도 줄었고 코드 품질도 훨씬 좋았다. 무엇보다 자바의 리플렉션에 해당하는 기능들이 문법 자체에서 자연스럽게 사용가능하고 Weak typing 덕분에 아주 유연한 코드를 만들어낼 수 있다는 점이 매력적이었다. 그래서, 난 파이썬 문법을 이어 받으면서 자바와 더 친해진 그루비(groovy)의 등장이 더없이 반가웠다. 곧 나는 진짜 실무에 이 그루비를 적용해보기 시작했다. 대상은 원래 Ant로 되어 있던 자동 디플로이 시스템을 그루비의 Ant 바인딩으로 소화해내는 것이었다. 이 작업을 하는 목적은 유지 보수가 쉬우면서도 많은 요구사항을 소화하는 시스템을 만드는 것이었다. 그루비는 인터프리팅이 가능하고 문법이 쉽기 때문에 스크립팅이 필요한 부분에서 자바에 비해 비교 우위를 갖고 있었고 그러면서 Ant가 갖지 못한 언어로서의 파워를 가지고 있었다. Maven의 기본 스크립트인 Jelly와 비교해도 훨씬 쉽고 강력했다. 게다가 자바에 임베딩하기 쉽다는 장점이 있어 스크립트를 웹 UI와 연계하기도 쉬웠다. 어느 모로 보나 이런 부분의 코딩에 있어서는 최강의 수단이었다.

그러나, 의외로 그루비의 한계는 내가 예상치 못한 부분에서 나타났다. 그루비의 문법은 자바보다는 쉽고 가볍지만 여전히 자바의 기본을 따르고 있고 기반 라이브러리들은 자바로 구현된 것을 그대로 써야하기 때문에 처음부터 파이썬 문법으로 디자인된 파이썬의 라이브러리들에 비해 불편함이 많다. 그래서 자바의 다양한 라이브러리들을 내부에서 활용하면서 코딩을 하다보면 자바코드와 그루비의 코드는 비슷해지게 된다. 그렇게 좀 복잡한 클래스를 만들어가다보니 이클립스 JDT의 도움도 얻지 못하는 그루비의 코딩이 더 없이 짜증스러웠다. 결국 언어 자체가 아무리 좋아도 IDE가 받쳐주지 않으면 활용도는 낮아지게 마련이다. 그루비에게는 이클립스 JDT 수준의 강력한 도구가 없었다.

그루비에게 그런 도구가 없는 것은 그루비가 나온지 얼마 안된 신생아이기 때문이 아니다. 그것은 그루비에 agility를 가져다준 Weak typing 때문이다. 파이썬으로 대표되는 스크립트 언어들의 IDE는 Java나 C/C++에 비해 기능이 많이 떨어진다. 특히나 실제 코딩에서 가장 중요한 content assist 기능은 대부분 지원하지 않거나 단순한 목록 관리 차원에서 머무른다. 소스를 분석하여 정확한 자료를 보여주는 자바 IDE들과는 거리가 있다. 이것은 변수의 타입이 런타임에 결정되는 Weak typing 언어들에게는 공통적인 단점이다. 런타임에 타입이 결정되다보니 개발 도중에는 변수에 대해 아무 것도 알 수가 없는 것이고 그래서 IDE도 별다른 서포트를 해주지 못하는 것이다. 이런 문제들을 해결하려면 IDE가 컴파일러 수준을 넘어서 Virtual machine 수준의 분석 기능을 갖춰야하는데 결코 쉽지 않은 일이다. (이 쉽지 않은 일을 해낸 결과물이 있다. 이클립스 플러그인 pydev는 파이썬 코드를 실제 import 시켜서 content assist를 제공한다. 사실 이렇게 하면 컴파일 타임 수준의 content assist를 제공하는 자바보다 더 많은 일을 해낼 수 있다. 그러나, 여전히 위험성은 남아 있다. 어쨋든 기술의 발전으로 이런 위험성이 극복된다면 이 글은 취소다--;)

결국 Weak typing은 Strong typing에 비해 agility가 높고 좀더 짧고 쉬운 코드를 만들어 낼 수 있어 언어 자체의 생산성은 좋지만 그에 대한 대가로 IDE의 content assist를 잃었다. 프로그래머의 생산성 비교에서는 어떻게 될지 알 수 없다. 그리고, 경험상 단순 구문 강조 정도 되는 에디터로 코딩해야하는 그루비보다는 이클립스 JDT의 지원을 받는 자바가 복잡도가 증가할수록 훨씬 생산성이 좋았다. 그러나, 아직 파이썬보다 자바가 생산성이 높다고 말하기는 힘들어보인다. 기본 문법 구조에서는 그루비가 파이썬에게 크게 뒤진다고는 말할 수 없지만 파이썬의 라이브러리들은 자바의 라이브러리들보다 훨씬 쓰기 쉽기 때문에 파이썬의 생산성은 그루비보다 훨씬 높다. 결국 Weak Typing의 단점을 극복하는 방법은 IDE를 어떻게든 더 발전시키는 것보다는 에디터로 코딩해도 충분히 편한 언어를 만들어가는 것이리라.

p.s. 어쨋든 자바 안에서도 무언가 인터프리팅이 되고 자바에 임베딩이 되는 스크립트 언어의 필요성은 점점 부각되고 있다. 이미 많은 테스팅 프레임워크에서 Jython을 임베딩하여 사용하고 있고 JSP에서도 EL 수준을 넘어선 스크립트 언어의 필요성이 부각되고 있다. 그러면서 그루비가 떠오르고 있는 상황. 무엇을 선택하는 것이 좋을까? 자바만 아는 프로그래머가 많은 집단이라면 어쩔 수 없이 그루비겠지만 배울 의욕이 많은 집단이라면 Jython이 나으리라 생각된다. 두 언어를 동시에 사용하는 것도 의외로 즐거운 일이다.

참조


[프로그래밍분류]