다이내믹 프로그래밍 언어와 자바의 위기

Posted by 大山 Sat, 15 Jul 2006 14:48:00 GMT

다이내믹 프로그래밍 언어란 프로그램 실행중(런타임)에 프로그램 코드 자체가 변경될 수 있는 프로그래밍 언어를 말한다. 대표적인 다이내믹 언어에는 Lisp이 있으며 최근에 많이 사용되는 언어에는 루비, 파이썬 정도가 있다.

혹시 Lisp 개발자로부터 Lisp으로는 프로그램을 짜는 프로그램을 작성할 수 있다는 이야기를 들어 보았는지? Lisp의 이런 특징이 바로 언어의 다이내믹함에서 오는 것이다.

관련성은 있지만 이와 구분되는 개념에는 다이내믹 타이핑, 자동 메모리 관리 등이 있다. 꼭 그런 것은 아니지만 다이내믹 프로그래밍 언어는 보통 자동 메모리 관리, 다이내믹 타이핑 등의 기능도 가지고 있는 경우가 많다. 재미있는 점은 이러한 다이내믹함이 프로그래밍 언어에 추가될 때마다 개발자의 개발 생산성은 획기적으로 높아진다는 것이다.

자동 메모리 관리에는 보통 Garbage Collection이나 레퍼런스 카운팅이 쓰이는데, 이 기능이 있고 없고가 바로 자바와 C++의 가장 큰 차이점이라고 볼 수 있다. 메모리를 수동으로 지정하여 사용하고 해제할 경우 프로그램의 속도를 조금 더 빠르게 할 수는 있지만 이로 인해 손해보는 개발 생산성이 너무 크다. 바로 자바가 성공한 이유이다. 앞으로 자동 메모리 관리를 지원하지 않는 새로운 프로그래밍 언어가 성공할 확률은 제로에 가까울 것이다.

다이내믹(Dynamic) 타이핑에는 얽힌 오해가 있다. C 언어의 경우 포인터 타입 에러로 인해 개발자들이 고생을 많이 하곤 했는데, 이 때문에 자바 언어의 설계시에 스태틱(Static) 타이핑이라는 기능이 들어갔다. 당연히 자바 입문서들은 스태틱 타이핑을 예찬하곤 했었다. 문제는 객체지향 프로그래밍이 도입된 이상 스태틱 타이핑은 사실 중요하지 않게 되었다는데 있다. 결국 자바의 스태틱 타이핑은 불필요한 기능에 가까운 것이다. (물론 이러한 사실을 개발자들이 깨닫는 데 10년에 가까운 시간이 걸리긴 했다.) 다이내믹 타이핑을 사용하면 코드 작성이 훨씬 간편해지기 때문에 개발자의 생산성이 상당히 올라간다. 최근들어 루비나 파이썬 등이 인기를 얻고 있는 이유 중의 하나이다.

마지막으로 언어 자체의 다이내믹함인데, 이런 기능을 지원하는 프로그래밍 언어는 보통 eval이라는 함수를 가지고 있다. eval은 문자열로 전달되는 프로그램 코드를 프로그램 내에서 실행시켜주는 함수이다.

처음 접하는 사람에게 쉽게 이해가 가는 개념은 아니니, 심호흡을 한 번 하고 계속 읽으시길. 도대체 왜 프로그램 코드를 문자열로 받아서 실행시키느냐는 의문이 들 것이다. 이런 기능은 어떨까? 프로그램이 자신이 돌아가는 컴퓨터에 연결된 데이터베이스에 접속해서 데이터베이스 내부의 데이타 구조를 들여다본 다음 그런 데이타를 접근할 수 있는 API 함수들을 동적으로(다이내믹하게) 만들어서 개발자가 바로 쓸 수 있게 해준다면?

바로 루비로 만들어진 레일스 프레임워크의 핵심 모듈인 액티브 레코드의 기능이다. 이러한 프로그래밍 기법을 흔히 메타프로그래밍이라고 부르는데 개발자의 생산성을 획기적으로 높여주는 실로 대단한 기능이다.

위에서 설명한 이유로 인해 다이내믹 프로그래밍 언어는 개발자의 생산성을 무지막지하게 높여준다. 자바의 끝이 보이기 시작하는 이유이다.

Posted in  | Tags , , , ,  | no comments | no trackbacks

Comments

Trackbacks

Use the following link to trackback from your own site:
http://beyond.daesan.com/articles/trackback/125

Comments are disabled