본문 바로가기

정보기술

정적 타이핑을 둘러싼 나의 내적 갈등

『...전략...』


정적 타이핑을 둘러싼 나의 내적 갈등

(My Inner Battle with Static Typing) 


초보자들은 프로그래밍 언어에서 강한 타이핑(strong typing)과 정적 타이핑(static typing)을 혼동한다.


거칠게 말해서 강한 타이핑(strong typing)이란 언어가 두 개의 자료형(type)이 서로 호환되는지 여부를 검사하고, 만약 호환되지 않으면 에러를 발생시키거나 강제로 자료형을 변환함을 뜻한다.


겉으로 보기에 자바(Java)와 루비(Ruby)는 모두 강한 타이핑을 사용한다(strongly typed).  --- 이게 과도한 단순화라는 사실은 나도 안다.


이에 반해서 어셈블리(Assembly)와 C 컴파일러는 약한 타이핑을 사용한다(weakly typed).


컴파일러가 메모리 안에 저장되어 있는데 데이터가 정수인지, 문자열인지, 그냥 임의의 데이터인지 신경쓰지 않는다는 의미이다.


정적(Static)인가 동적(Dynamic)인가 하는 것은 완전히 다른 문제이다. 


정적 타이핑 언어(Statically typed language)는 자료형 구조에 기초해서 다형성(poly-morphism)을 적용시킨다.


(정적인) 유전적 청사진에 의거해서 오리(duck)인가, 오리처럼 꽥꽥거리며 걷기 때문에 오리인가?


정적 타이핑을 사용하는 언어는 컴파일러와 도구가 코드에 담긴 에러를 검출하고 코드의 키워드를 색상을 이용해서 강조하고, 리팩토링 기능을 제공하는 등의 이점을 누릴 수 있다.


그에 비해 코딩할 때 조금 수고를 해야 하고 제한도 뒤따른다. 


정적 타이핑에서 오는 이러한 트레이드오프(trade-offs)에 대해 어떤 생각을 하는가에 따라서 개발자로서의 역사가 달라질 것이다.


내가 처음 객체지향 개발에 사용한 언어는 자바였다.


자바의 정적 타이핑 울타리에서 벗어나기 전까지 나는 꼬리를 물며 나타나는 프레임워크를 만났었다.


업계는 수천, 수백만 달러를 세 가지 다른 버전의 EJB, 스프링, 하이버네이트, JBoss, 그리고 관점지향 프로그램 개발에 투입했고, 그런 노력을 통해 특정한 사용법을 전보다 약간 유연하게 만들었다. 


우리는 당시 자바의 타이핑 모델(Typing model)을 더 동적으로 만들기 위해서 애썼고, 이러한 전투의 고비마다 자바가 우리를 위한 프로그래밍 환경이라기보다 오히려 적군이라고 느낄 수 밖에 없었다.


그리하여 내가 저술한 책들도 동적인 프레임워크라는 주제에서 출발해서 나중에는 동적인 언어 자체를 향해 나아갔다.


따라서, 내가 정적 타이핑 언어에 대해서 가지고 있는 일종의 편견은 자바와의 전쟁에서 비롯되었다.


하스켈(Haskell)이 가지고 있는 탁월한 정적 타이핑 시스템은 이러한 상처로부터 서서히 벗어나는 계기가 되었다.


내 의도는 분명하다.


하지만 나는 우리의 대화가 편견에 영향을 받지 않고 공정하게 진행되도록 최선을 다할 것이다.


『...후략...』

[출처: 브루스 테이트의 세븐 랭귀지]