포인터의 진가는.. 포인터를 지원하지 않는 언어를 사용하다가 포인터를 접하게 될 때 알게 됩니다.
제가 한 8년간 사용했던 MS의 Visual FoxPro는 객체지향적 언어이긴 하지만 포인터는 지원하지 않습니다. Call By Ref를 지원하긴 하지만 아주 제한적으로 사용하죠.
포인터에 대해 알게 됐을때.. 정말 찌릿찌릿 했습니다. 그 전 까지는 어셈, 포트란, 베이직 밖에 접하지 못했기 때문에 그런 접근 방법은 어셈에서만 가능하다고 생각했었죠. 사실 충격이었습니다. C라는 언어는 문법은 4GL언어들과 다를바 없으면서 제공하는건 거의 어셈 수준의 접근방식을 모두 지원하고 있었으니까요. 그런 시절을 지금생각하면 웃음이 나오긴 하지만요.
사실 C/C++만 하신 분들은 포인터 없는 프로그래밍 언어를 상상하기 힘드시겠지만 사실은 포인터 없이도 웬만한건 다 만들 수 있습니다. Call By Value만을 지원하는 언어에서 메모리 복사는 전혀 이상한게 아닙니다. 배열에 저장하여 인덱스로 접근하는 것 역시 전혀 이상한게 아닙니다. 물론 '효율'은 엄청나게 떨어지지만 그 세계에선 당연한 얘기지요. 당연하기 때문에 그 세계에선 그게 최고의 효율입니다.
포인터에 대해 전혀 모르는 사람에게 효율을 운운해 봐야 아무 소용 없습니다. 중요한건 기존의 방법이 동작하는 원리를 이해시키는 것이겠죠. 그러면 자연스럽게 답이 나올겁니다. 포인터가 왜 필요한지.. 어떻게 써야 할지..
질문한 사람이 수야님에게 소중한 사람이라면(그냥 그저 그런 사람이라면 내비두세요. 필요하면 알아서 공부해서 다 쓸겁니다)코딩으로 뭔가를 보여주려 고생하지 마시고 신문지 한장 펼쳐놓고 거기 글짜들이 메모리의 기억 내용이다.. 빈 공간이 메모리에서의 쓸 수 있는 영역이다.. 이런 식으로 전혀 다른 설명에 필요한 모델을 도입해 보세요. 포인터에 집중하지 마시고 컴퓨터의 동작 방식 자체에 초점을 맞추세요. 아마 훨씬 빨리 이해시킬 수 있을겁니다.
우리나라 교육의 맹점... 왜 공부해야하는지 아무도 가르쳐주지 않습니다. 왜! 미적을 배워야 하는지, 왜! 사회를, 왜! 국어를 공부해야하는지 아무도 가르쳐 주지 않습니다.
제가 지금 고딩이라면 전 제가 그렇게 싫어했던 국어도 정말 열심히 공부할겁니다. 꿈에도 보기 싫었던 사회도 열심히 공부할겁니다. 왜 필요한가에 대한 답변을 얻었을 땐 이미 너무 늦어버리는게 우리나라 교육 현실이 아닐까.. 생각해 봅니다.
|