흔히들 포인터의 벽이라고 하는데, 사실 그렇게 어렵지 않아요. 어그로 끄는 게 아니라 포인터의 개념 자체는 그다지 어려운 게 아니에요. 차근차근 해 나가면 되어요. 어느 순간 아~ 하고 온다니까요. 예전부터 C 프로그래밍의 벽으로 꼽히는 포인터에 대해서 많이들 부담스러워 하긴 하는데...왜 그렇게 어려워 하는지 돌이켜 생각해 보면 이래요
<문법적 문제> - 포인터의 '*' 기호가 '레퍼런싱'할 때도 쓰이고 '디레퍼런싱' 할 때도 쓰이는데, 애초부터 그 구분에 대해 개념이 없어서 코드가 읽히지 않음. -> 이건 소싯적에 제가 그랬어요. 아~ 하고 깨닫고 나니 암것도 아인 것을
- 연산자 우선순위를 알아보는게 조금 복잡해서. 괄호의 압빡! -> 이건 헷갈리게 짜 놓은 놈이 나쁜 놈입니다.
<기본 개념의 부재> - 포인터를 이해하려면 배열/함수에 대한 이해가 있어야 합니다. 근데 여기까지 오는 거 자체가 즐거운 학습 곡선이 아닌 거죠. -> 포인터를 활용하려면 애초부터 포인터의 메모리를 할당받는 법과 해제하는 법부터 시작하는데, 이미 여기서부터 아무 생각 없이 printf, scanf 찍는 작업을 넘어서 printf, scanf 등등이 함수라는데, 대체 함수란 게 뭔지에 대해 개념이 잡혀야 하죠 -> 이 학습 곡선까지 무작정 들어오고 무작정 나가려고 하니 문제가 발생합니다. 차근차근히 접근하세요.
- 메모리 어드레스에 대한 기본 개념을 무시한 채 포인터에 접근함. -> a = 10, b = 3.14 하다가 갑자기 직접적인 대입이 아닌 참조(레퍼런싱)에 대해 이해하기가 첨부터 쉽지는 않죠. -> 공부는 뭐든 기본 컨셉을 이해하는 것부터 시작하는데 무작정 외우기부터 하고, 무작정 코딩만 하려고 하고.. 그러면 안됩니다. 차근차근.
<'포인터의 활용'과 '개념적 이해'가 뒤섞여 버림> - 포인터의 벽이라는 말은 학습의 차원에서 '개념'이 부족한 상태인 거지, 실전에서 능수능란한 단계가 아니라는 의미와는 조금 거리가 멉니다. 이걸 동일선상에 놓고 생각하면 안돼요. 암만 프로그래밍 잘 해도 헛점이 있을 때 있고 다들 한번쯤은 널 포인터 예외 먹고 눈물 흘립니다. 그게 개념이 없어서 그런 것도 아니구요. 조금만 생각하면 또 다 잘 잡아냅니다.
다른 공부들도 마찬가지지만, 머릿속에 전반적인 그림을 그리는 것이 중요합니다. 특히 프로그래밍도 개념(concept)과의 지난한 싸움입니다. 그런데 우리가 그동안 받아온 교육들이 다들 깊은 생각을 요구하는 것이 아닌 단순 암기교육이다 보니 프로그래밍 언어도 대강 외워외워 암기한 내용을 끄집어내 답을 맞추려 합니다. 절대 그렇게 해서는 프로그래밍이 되지 않습니다. 프로그래밍은 철저하게 작문과 유사하며, 논리적으로 사고해야 합니다. 그리고 암기가 아니라 창작입니다.
"RTFM"이란 말이 있어요. "빌어먹을 메뉴얼을 좀 읽어 보라고" 정도로... 좀 격한 말이긴 하지만 매뉴얼만 좀 읽어 봐도 알 수 있는 내용을 질문하지 마라는 유명한 격언(?)입니다. 직접 듣게 되면 불쾌한 말이긴 한데, 무작정 묻지만 말고 스스로 찾아보려는 노력 정도는 해라는 직언이긴 합니다. 조금 시간이 걸려도 기초를 단단하게 하세요. 그리고 초심자는 원래 갈팡질팡 삽질하게 마련입니다. 그 과정 없이 전문가가 될 수 없어요. 힘내세요!