Generics... 類적 존재...
November 20, 2004
가끔씩은 類적 존재로서의 인간의 소중함을 잊어버릴 때까 많다. 과연... 사회를 이루어 류의 영속을 위해 존재하는 인간들일까 하는 생각을 한다.
전쟁과 침략.. 종교적 맹신... 인간은 없고.. 평화도 공존도 없고..
파괴와 전도된 관념들이 펄럭인다.
자바 5.0에 류적 존재가 등장한다.
자바에 제네릭스를 도입하기 위한 연구는 이미 8년전인 1996년부터라고 한다. 실제로 자바에 제네릭스를 도입하는 몇 가지 방안들이 논문으로 나오기 시작한 것이 1998년 초임을 감안하면 무려 8년이 지난 후에야 JDK 5.0에 전격 채택되었다는 것은 이것이 얼마나 어려운 일이었나 하는 것을 보여준다. 자바의 스펙을 결정하는 표준화 절차인 JSR을 보면, 제네릭스를 논의하는 JSR 14가 형성된 것은 1999년이었다. 하지만, 아쉽게도 JDK 1.4가 나온 시점이었던 2002년까지 제네릭스를 자바에 적용할 수가 없었다. 제네릭스를 어떻게 구현할 것인가에서부터 제네릭스를 도입한 영향을 어떻게 최소화하고 기존 JDK 버전과의 역방향 호환성을 유지할 수 있을 것인가 하는 이슈에 이르기까지 제네릭스는 그야말로 뜨거운 감자였던 것이다. 조금 뒤늦은 감이 있긴 하지만, JDK 5.0이 출시된 지금도 여전히 다른 방식의 제네릭스 구현을 선호하는 그룹들이 있으며, “Thinking In Java”로 유명한 브루스 에켈은 서운한 감정을 자신의 블로그에서 여과없이 드러내고 있기도 하다. 물론 추후 JDK 버전에서 다른 방식의 제네릭스 구현이 채택되지 않는다는 보장은 없을 것이다. 특히 C#이라는 만만찮은 경쟁 상대를 두게 된 현실에서는 더욱 더 그러하다. C#에서도 최근 제네릭스가 채택되었으며 그 구현 방식은 자바와 반대이며 C++와 유사하다는 점에서 자바와 C#의 제네릭스 성공 여부가 주목을 받을 것 같다.
자바 5.0을 사용하면서 제네릭스는 전면에 와닿는 문제이다. 코드의 상당 부분에 꺾쇠 괄호가 채워지게 될 것이고, 또 컴파일할 때마다 강화된 자료형 검사에 당황하게 될 것이다. 그리고 자바 5.0으로 개발을 하는 동안 결코 유쾌하지 않은 경고 메시지와 종종 만나게 될 것이다. 이 경고 메시지는 실제 잘못된 형 변환을 지적할 수도 있으므로, 쉽게 무시해서는 안 된다. 가능하면 -Xlint:unchecked 기능을 항상 켜고 컴파일을 하는 것이 현명할 것이다.
Note: Recompile with -Xlint:unchecked for details.
제네릭스는 직접 제네릭스를 지원하는 자료 구조를 만들려고 하지 않는다면 기쁘게 사용하면 되는 선물일지도 모른다. 하지만, 프로그래밍이라는 것이 어느 한쪽 켠에만 숨어 지내게 하지 않는다. 결국 제네릭스의 깊은 부분, 어쩌면 자바 제네릭스의 어두운 부분과 맞닥뜨릴 일이 있을 것이다. 자바 5.0이 놀라운 수행 성능 개선을 보이면서 멋진 모습으로 다가왔다. 제네릭스가 온통 유쾌한 언어 기능이 아닐지는 모르지만, 자바 5.0의 멋진 면모를 보여주는 중요한 요소임에 분명하다. 기대에 조금 못 미치는 면도 있고, 사실 불필요하게 어려워진 부분도 있지만, 도구는 결국 활용하는 사람에 의해 그 가치가 드러나는 법이므로 자바 5.0이라는 도구를 최대한 활용하여 좋은 소프트웨어를 만들고, 또 다음 버전에는 더 나은 기능들이 채택될 수 있도록 노력하면 될 것이다.
1 Generics in the Java Programming Language, Gilad Bracha, July 2004
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
2 Java Specification Requests 14 : Add Generic Types To The JavaTM Programming Language
http://jcp.org/en/jsr/detail?id=14
3 Puzzling Through Erasure, Bruce Eckel, Sep., 2004
http://mindview.net/WebLog/log-0057
4 Puzzling Through Erasure : answer section, Neal Gafter, Sep., 2004
http://gafter.blogspot.com/2004/09/puzzling-through-erasure-answer.html