템플릿을 쓰지 말고 코딩하라고?
C++로 코딩할 때 STL을 즐겨 사용했습니다.
대학교에서는 왜 이런 걸 가르쳐주지 않았을까?
학생 때 고생 고생해서 만든 동적 배열, 링크드 리스트, 맵 같은 것들이 여기 다 있었네.
내가 만든 것보다 훨씬 좋은 걸.
제가 만든 라이브러리들은 압축해서 컴퓨터 안의 깊은 창고 속에 집어넣었습니다.
그것들은 이후로 한 번도 햇빛을 보지 못했습니다. 저는 STL과만 놀게 되었거든요.
STL은 어려웠지만 배워나가는 기쁨이 있었습니다.
어? 자료구조만 있는 게 아니라 알고리즘까지 일반화를 해두었잖아?
이런 라이브러리를 만들 수 있다니. 나는 어떤 세계에 살았던 것인가.
STL은 C++ 자체였고 STL을 모르고서는 C++로 코딩한다라고 말하기 힘든 것이었습니다.
친해질수록 STL은 제 코딩 생활을 편하게 만들어주었습니다.
어느 날 나이가 저보다 10살쯤 많은 선배님이 말했습니다.
“네가 짜는 코드는 너무 보기 어려워. 그 템플릿 같은 거 좀 안 쓰면 안 되겠니?”
“네? 무슨 템플릿이요?”
너무 보기 어렵다고? 난 템플릿 잘 안 쓰는데.
뭘 말씀하시려는 건지 어느 정도 알고 있었습니다.
ruby 코드로 배열의 각 숫자에 10을 곱하는 프로그램을 짜려면 이렇게 합니다.
[1, 2, 3, 4, 5].map { |i| i * 10 }
C++로 짜면 이렇게 합니다.
int a[5] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; i++)
{
a[i] *= 10;
}
루비 코드가 훨씬 간단하지만 C++ 코드도 보기 좋습니다.
어쩌면 훨씬 직관적인 것 같기도 합니다.
루비 코드는 짧긴 하지만 그렇게 쉬운 코드는 아니거든요.
STL을 이용해서 루비처럼 짤 수도 있습니다.
루비처럼 예쁘지는 않지만요.
std::vector<int> v = { 1, 2, 3, 4, 5 };
std::transform(v.begin(), v.end(), v.begin(),
[](int i) { return i * 10; });
저는 이런 방식으로 STL을 사용해 코드를 짜는 걸 즐겨했습니다.
STL을 처음 보는 사람에게 이 코드는 당혹스러운 느낌으로 다가온다는 것을 저도 알고 있었습니다.
그냥 편하게 for 루프로 짜지 왜 저런 짓을 하지?
저는 STL을 쓰며 이런 생각들을 했던 것 같습니다.
나 따위 프로그래머가 직접 인덱스를 조작한다고?
분명히 실수할 텐데?
나 따위 프로그래머가 감히 직접 new, delete 를 한다고?
실수하면 엄청 고생할 텐데?
나 따위 프로그래머가 직접 라이브러리를 만들어 쓴다고?
STL을 만드는 사람들보다 잘 만들 수 없을 텐데?
게다가 코드를 재사용하는데도 탁월한 걸.
코드 보기가 어렵다라… 그래 그럴 수도 있지.
그런데 그렇다면 다시 옛날 방식으로 돌아가야 하나?
모두가 이해할 수 있는 프로그램을 만들기 위해서?
아니 가만, 근데 이 프로그램이 그렇게 어려운 정도인가?
저는 동의할 수 없었습니다.
언어에 엄연히 존재하는 기능을 조금 보기 어렵다고 안 쓰기로 하면 팀 전체가 하향평준화되는 거잖아.
이제 C++로 더 이상 프로그램을 짜지 않지만 다시 C++ 프로그래밍을 해야 하는 날이 온다면 또 STL을 열심히 사용하겠습니다.
람다도 열심히 쓰고 새로 생긴 C++ 문법과 라이브러리도 알아볼 것 같습니다. 어디 좋은 거 생긴 거 없나 하고.
몸에 좋다는 건 다 먹어야지 하는 마음으로.
코딩할 때 날 편하게 도와주는 것은 다 배우고 싶어.
몸에 좋은 게 입에 쓴 건 당연한 거 아냐?
한 편으로 저는 이제 그 선배님의 마음을 어느 정도 이해합니다.
나이를 먹고 결혼을 하고 아이를 갖고 하면서 공부한다는 것이 점점 부담스러워지는 것을 저도 느끼거든요.
음…
하지만 아무리 그래도 프로 프로그래머라면 STL 정도는 배워야 하지 않을까요?(웃음)
함께 읽으면 좋은 글: