포토로그



시대에 따른 전역 변수의 변신

옛날 옛적에 전역 변수란 놈이 있었습니다. 프로그래머들은 이 놈이 프로그래밍을 어렵게 한다고 모두 욕했죠. 사악한 악마라고 몰아부쳤습니다. 전역 변수는 너무 쉬웠습니다. 아무나 언제 어디서나 집적댈 수 있었죠. 하지만 그렇기 때문에 가끔은 아주 유용했습니다. 그래서 현자들은 전역 변수들을 가두어 두고 보통 사람들이 직접 접촉하지 못하도록 권유 했습니다. 하지만 사람들은 암암리에 전역 변수와 직접 거래를 했죠. 오늘의 빠른 퇴근을 위해 내일을 팔았습니다. 때로는 그 내일은 자신의 것이었고 때로는 다름 사람의 것이기도 했습니다. 특히 프로그래머들은 잦은 야근으로 잠을 충분히 못잤기 때문에 도덕적 판단력이 흐려져 있었기 때문에 내일 쯤은 쉽게 팔 수 있었습니다. -.-

사람들과 직접 만나 조금씩 힘을 모은 전역 변수는 재기를 기다리고 있었습니다. 1990년대, OOP의 등장과 함께 온갖 새로운 이름의 뜨네기들이 마을을 드나들었습니다. 디자인 패턴(Design Patterns)이란 무리 속에 싱글톤(Singleton)이라는 놈이 있었습니다. 전역 변수는 싱글톤으로 이름을 바꾸었습니다. 사람들은 싱글톤을 많이 썼습니다. 아마 디자인 패턴에 나오는 패턴 중에 가장 쉬운 패턴이기 때문이었을 겁니다. 아무나 언제 어디서나 집적댈 수 있었습니다. 하지만 싱글톤은 표면적으로 비싼 자원을 한 번만 만들어서 사용하기 때문에 자원을 절약한다는 명분으로 사람들을 한동안 속일 수 있었습니다. 또 Double-Checked Locking이라는 누구나 한마디 쯤 할 수 있는 논쟁거리도 만들어서 사람들을 서로 싸우게 만들었습니다. 어느날 Inversion of Control 혹은 Dependency Inversion이라는 불리는 놈이 등장해서 싱글톤을 몰아냈습니다.

하지만 전역 변수는 죽지 않았습니다. 단지 조금 다른 모습으로 이름을 바꾸었을 뿐. 2000년대 이제 AOP 무리가 유행을 이끕니다. 보안, 트랜잭션 등 Cross Cutting Concern을 공략할 수 있다고 합니다. 자바 동네에서는 static ThreadLocal을 써서 프로그래머가 트랜잭션을 직접 조작하지 않아도 되게 만들었습니다. 일반적인 코드에서 트랜젹션에 대한 코드를 분리하여 감추었습니다. 아주 유용했죠. 훌륭하게 문제를 해결했습니다. 이를 본 사람들은 static ThreadLocal을 많이 쓰기 시작했습니다. WebWork의 ActionContext도 초기에 너무 노출이 많이 되어 한 몪 했죠. 이제는 static ThreadLocal이 전연 변수를 대신 했습니다. 아무나 언제 어디서나 집적댈 수 있었죠. 사람들은 때와 장소를 가리지 않고 집적댔습니다.

다음에는 어떤 모습을 하고 나타날지 모르겠군요. 우리의 생각이 얼마나 전역 변수에 의존적인지 느껴보고 싶으면 Haskell이나 Erlang 등의 함수형 프로그래밍을 해보세요. 우리는 필요 이상으로 전역 변수를 쓰고 있습니다. 꼭 그 이름이 전역 변수는 아닐지라도.

덧글

  • 김창준 2007/03/31 21:30 # 삭제 답글

    대다수의 사람들은 컴퓨터만 프로그래밍할 줄 알지 자기 머리를 프로그래밍하는 의지와 기술을 갖추지 못하고 있는 것 같습니다. 가장 중요한 리소스를 재프로그래밍해서 개선할 생각을 못하는 것이죠.

    neuro-plasticity라는 말이 있습니다. 뇌를 재 프로그래밍할 수 있다는 것이 근래 들어서 뇌과학의 성과로 밝혀졌습니다. 과거에는 뇌 세포는 태어날 때부터 정해져 있다는 이야기까지 하곤 했죠(하지만 나이가 들어서도 뇌 세포는 새로 생깁니다).

    예컨대 새로운 언어를 배우면 뇌의 구조가 바뀌고 어떤 부위가 실제로 커지기도 하는 등 물리적 특징들이 바뀐다고 합니다.

    글로벌의 해악을 줄이는 방법은, 우선 프로그래머들의 마인드를 재프로그래밍하는 것이 기본이라 생각하며, 그렇게 하기 위해서는 새로운 패러다임의 언어를 배우는 것이 매우 유효할 것이라 생각합니다.
  • ologist 2007/04/06 01:03 # 삭제 답글

    왜 새로운 랭귀지일수록 글로벌에 해악을 강조사는지 되새겨 봐야겠습니다. 글로벌을 다시 로컬로 바꾸는 작업을 하는 것도 참 웃긴 일입니다. 우리는 오늘도 글로벌의 해악을 보지 않았습니가? 왜 알면서 쉽사리 낚이는 걸까요? 우리는 글로벌 괴물에 낚이지 않도록 조심을 해야겠습니다.
댓글 입력 영역