본문 바로가기
카테고리 없음

비전공자를 위한 C/C++언어 공부법은?

by 잘살람 2021. 8. 26.

요즘 많은 비전공자들이 개발자가 되기 위해 코딩 공부를 하고 있다고, 뉴스에서 보게 되었습니다.

저도 그 중에 한 명이었고, 특히 게임 개발을 중점적으로 공부했습니다.

 

성공적으로 개발자가 되어, 원하는 것들을 이루는 분들도 계시지만, 결국 포기하고 다른 길을 찾는 분들 또한 심심치 않게 보게 되었습니다.

 

C 언어가 다른 프로그래밍 언어들에 비해서 난이도가 있었기 때문인지는 모르겠지만, C언어를 처음 공부하던 당시 저도 몇 번이고 포기하려는 마음을 붙잡고 공부했던 걸로 기억합니다.

 

당시 느꼈던 경험과 제가 습득한 저만의 방식을 통해서, 새롭게 C언어를 공부하는 분들이 더 친근감 있게 발을 내딛을 수 있도록 돕기 위해서 이렇게 글을 작성하게 되었습니다.

1. 비전공자 미대생에서, 개발자가 되기까지 

 

저는 수학, 공학과는 전혀 관련 없는 '무대미술'이라는 전공을 대학교에서 배웠습니다.

 

이런 제가 '언리얼 엔진'을 접한 이후  프로그래밍을 배워 개발자가 되기까지의 과정은 결코 쉽지 않았습니다.

 

그중에서도  특히 C언어는 제가 프로그래밍 공부를 시작하자마자 포기하고 싶게 만드는 가장 큰 요소였습니다.

이렇게 느낀 이유가 무엇이었을까요?

물론, C/ C++이 다른 여타 언어에 비해서 난이도가 있기 때문일 수도 있습니다.

하지만 제가 어려움을 느꼈던 가장 근본적인 부분은 인터넷에 떠도는 대부분 강의들이 '무작정 따라 쓰기 방식'으로 가르 쳤기 때문이었습니다.

 

물론, 이 방식은 분명 효과가 있습니다. 코드를 몸에 습득하고, 언어체계를 학습하기에는 더할 나위 없이 좋은 방법인 것을 저도 인정합니다.

 

그런데 이 방법은 컴퓨터 공학을 전공하는 학생들이나,  수학과 물리학을 수시로 접하는 이과 학생들에게는 좋을 수 있겠지만, 저와 같이 미술을 전공하거나 상대적으로 컴퓨터 언어에 덜 노출되어있는 사람들에게는 시작하기에 정말 좋지 못한 방법인 것 같습니다.

 

특히 게임 개발에 있어서는 C /C++언어를 공부하는 것이 시작이자 가장 기본기인데, 보통 C/C++ 언어를 배우기 위해 모이는 사람들은 대부분 '파이썬' 또는 '자바스크립트' 같은 다른 언어들을 이미 공부하고 온 분들이 많았습니다. 때문에, 대부분의 강의는 컴퓨터 공학에 대한 기초 지식을 가지고 있는 분들을 위한 강의였습니다.

 

그래서 저는 이번 기회를 통하여  C/C++ 그리고  언리얼 엔진을 공부하면서 느꼈던 것들을, 최대한 '비전공자의 관점'에서 설명드리고 싶습니다.

 

정말 단어 하나하나가 생소한 분들, 컴퓨터 동작원리조차 생소한 분들을 위한, 완전 기초부터 친숙한 방식으로 차근차근 쌓아 올라가는 글을 써야겠다고 생각하게 되었습니다.

2. C/C++언어도 결국엔 '언어'다. 즉, 제3의 외국어처럼 생각하자! 

아마 이 두 번째 주제를 보시고, 프로그래밍 관련된 사전 지식이 있으시거나, 현업에서 프로그래밍을 하시는 분들은 '아닌데..' 하며 고개를 갸우뚱하실 수도 있습니다.

 

어떤 관점에서 그렇게 생각하시는지 충분히 이해합니다. 하지만, 제가 지금부터 얘기하는 관점은 철저하게 '비전공자'에게 초점이 맞춰진 상태로 이야기할 것이기 때문에, 위와 같이 표현하였습니다.

 

초보자의 입장에서, 컴퓨터의 운영체제, 코드가 메모리와 어떤 관계를 가지고 작동하는지 등등을 하나하나 짚고 이해하기에는  내용이 너무 방대하고 정작 배워야 할 c는 배우지 못한 채로 지치고 포기하기 마련입니다.

처음 언어를 배우기 위해서  C 언어를 선택한 사람들에게는 오히려 말 그대로 '언어'에 더욱 집중하는 것이  흥미를 잃지 않고 재미있게 공부할 수 있을 것입니다.

 

물론, 기본적인 메모리 작동 원리를 빼놓고 여러분들께 소개하지는 못할 것입니다.

그렇게 메모리 동작을 개발자가 관리할 수 있다는 것이 C의 장점이니까요.

때문에 초보 때는 오히려 컴퓨터와 관련된 공학 지식의 엑기스를 뽑아서,  C언어를 이해하는 데에 도움을 받는 형식이  배우는데 좋다고 생각합니다.

 

자, 그렇다면 왜? 컴퓨터 언어 또한 새로운 외국어라고 표현을 하는 걸까요?

문장 자체에서 힌트를 얻으신 분도 있을 것이라고 짐작합니다만, 한국인 대다수가 초중고 교육과정을 거치면서 영어를 배우니까, 영어에 빗대어서 말씀을 드리겠습니다.

 

'I go to school'이라는 문장을  해석해 봅시다

 

 

 

I ( 나는 )//주어

go to (~로(향해) 간다) // 숙어 ----------->  go ( 간다// 동사) +  to 부정사

school (학교) // 명사

 

 

 

이렇게 분할해서 아마 우리의 눈에 들어올 것입니다. 이를 해석할 때, 우리는 자연스럽게 머릿속으로 ' 나는 /~에 간다/ 학교'라는 순으로 우리의 머릿속에 나열되고,  우리도 모르게 우리의 몸속에서는 한국어의 어순에 맞춰서 '나는 학교에 간다'로  순서가 짜 맞춰지게 될 것입니다.

 

각각의 단어들이 주어인지, 명사인지 몰라도 뜻만 알면, 우리는 어떤 것을 의미하는지 충분히 해석할 수 있습니다.  하지만, 만약 이런 문장이 왜 이런 순서로 배열이 되는지 , 언어적인 원리가 무엇인지 깨닫는다면,  해석하는 것을 넘어서 내가 직접 알고 있는 다른 단어들을 조합하여 말하고 싶은 문장을 만들 수 있습니다.

 

컴퓨터 언어 또한 크게 다르지 않습니다.

다음은 프로그래밍을 시작할 때 가장 먼저 배우고 프로그래밍의 '세례식'이라고 부르는

hello world를 해석해 보겠습니다.

 

 

#include <stdio.h>   // c언어를 사용하기 위한 기본 라이브러리 ( 영어로 따지면 숙어(?)) 를 컴퓨터가 이해할 수 있록                                  '포함' 합니다 

                              // stdio.h 헤더는 아래에서 사용할 printf를 포함하고 있습니다

 

int main()                   //컴퓨터가 주로 작동해야 하는 '메인 함수'

{

   printf("hello word");  // 문자열 "hello word"를 콘솔 창에 출력합니다

   return 0;                 // 0을 남기고 모든 동작을 종료합니다

}

 

 

 

 

이렇게 각각의 문장들이 어떤 것을 의미하는지 알고만 있다면, 프로그램이 어떻게 동작을 할지 우리는 바로 알 수 있습니다.

 

이제 여기서 inclue가 정확히 뭔지, 변수는 무엇인지 변수 타입이란 무엇이고 int는 무엇을 의미하는지 등등.. 을 알고 깊이 있는 원리를 깨우치게 된다면, 그러한 요소들을 블록처럼 조합해서 내가 원하는 동작을 프로그래밍하여 컴퓨터에게 시킬 수 있게 됩니다.

 

저는 앞으로 이러한 관점으로 계속해서 포스팅할 예정입니다.

물론 아직 부족한 점이 많겠지만,  저와 같이 고생하고 고민하는 비전공자 개발자들을 위해 같은 관점으로 바라보고 최대한 c /c++언어를 여러분들이 친숙하게 이해할 수 있도록 포스팅하기 위해 노력하겠습니다.

 

재미있게 글을 읽으셨다면 '댓글' 또는 '공감'을 눌러주시면 감사하겠습니다.

다음 시간에 뵙겠습니다. 감사합니다.