게임학원, 게임프로그래머 취업 전문 교육기관 DirectX11/12 자체엔진 게임개발과정,서버프로그래밍,자료구조,알고리즘,유니티,언리얼 게임학원, 언리얼학원 C++ 프로그래밍 입문 1)
본문 바로가기

C++ 프로그래밍 입문 1)

 

1-1. C++이란 어떤 언어인가?

학습목표

프로그래밍 언어란 무엇인가?

그 중 C++은 어떤 언어인가?

 

프로그래밍 언어란? /

과거 폰노이만이라고 하는 사람이 있었다. 세기의 천재였던 그는 최초의 범용 컴퓨터의 기본 구조를 설계했고 그리고 그 컴퓨터에 명령을 내리는 기본적인 방법을 만들어 냈다. 그 방법은 012진수를 통해서 모든 계산을 처리하는 방식이었다. 010이면 더하기 101 빼기 이런 식의 명령의 중첩을 통해서 인간이 계산한다면 한 번에 몇 년이 걸릴지도 모르는 작업을 순식간에 처리해주는 컴퓨터가 등장했다. 그리고 그런 초기에 컴퓨터에게 명령을 내리던 2진수를 기계어라고 불렀다.

하지만 인간이 0101 01110 0011011 같은 명령을 보고 한 번에 이해하기란 어려웠고 다시 2진수를 규격화하여 만든 어셈블리어가 탄생했다. 하지만 어셈블리어도 결국에는 기계 친화적인 언어였고 인간이 익히기에는 어려웠다. 그래서 다시 인간이 주로 사용하는 언어체계와 같은 단어나 명령어를 2진수나 기계어로 변형하는 방식이 만들어졌고 이를 고급언어라고 한다.

고급언어는 굉장히 많은 수의 종류가 있고 내용은 동일하지만 공부 방향에 대해서 추천하자면 한 가지 언어를 우선적으로 깊이 배우는 것이 효율적이라는 것이다. 이야기를 하자면 프로그래밍 언어는 외국어에 비유할 수 있다. C++은 영어 C#은 일본어 JAVA는 프랑스어 그러한 상황에서 여러분들이 동시에 여러 가지 언어를 배우는 것은 진짜 천재라도 힘든 일이다. 영어와 일본어 독일어를 동시에 배우면서 그 모든 언어를 통해서 소설을 쓸 수 있을 정도의 작문능력을 가져야 취업이나 취직을 할 수 있다. 하지만 사실 언어 중 어느 것 하나만 잘해도 되는 상황에서 굳이 여러 가지 언어를 통시에 배울 필요가 없는 것이다. 오히려 어느 언어도 제대로 학습하지 못해 어느 현장에서도 제대로 일할 수 없는 상황이 오게 된다.

그럼 C++이라는 언어는?/

프로그래밍에는 패러다임 이라는 것이 존재한다. 절차지향은 최초에 컴퓨터의 처리모양을 인간이 다루기 쉽게 만들어진 패러다임이었다. 컴퓨터가 기계어를 처리하는 것처럼 순차적인 모양으로 코드를 짜고 코드 자체는 모두다 데이터와 연산을 기반으로 해서 처리되는 방식의 패러다임으로 대표적으로 최초의 고급언어인 C도 이런 절차지향 패러다임 기반의 언어였다.

초기 프로그래밍 언어들은 절차지향이라는 개념 하에 만들어졌다. C는 분명히 이전보다는 인간이 익히기에는 쉬웠지만 인간이 일반적으로 생각하는 연관성이나 다양한 형태의 구조를 작성하는 것에서 역시나 인간에게 친화적이지 않다는 문제가 있었다.

그 이후 객체지향이라는 패러다임이 대두되었고 절차지향이 주류였던 프로그래밍 언어에 객체지향 언어들이 만들어지기 시작한다. C++은 그 초기에 만들어졌고 객체지향과 절차지향을 모두 사용할 수 있는 언어로서 멀티패러다임 언어이다.

이때 주의해야할 것은 프로그래밍 패러다임들은 서로가 대립의 개념이 아니다. 절차지향의 반대개념이 객체지향이라고 말하거나 절차지향으로 짤 수 있는 프로그램이 따로 있는 개념이 아닌 의미는 같고 이루어지는 것도 같지만 써야하는 단어나 문법이 다를 뿐이라는 점을 인식해야 한다.

또한 C++은 언어중 메모리관리까지 프로그래머가 관리해야하는 언매니지드 언어이다. 언어의 구분에는 매니지드 언어와 언매니지드 언어로 구분하는 경우가 있는데 이는 프로그래머가 프로그램의 메모리를 더 세세하게 관리하되 그에 따른 코드도 더 많이 쳐야하는 언어로 이해하면 쉽다. 매니지드는 언어는 C# JAVA등이 대표적이며 프로그래머가 과거에 처리해오던 것을 언어자체에서 처리해주기 때문에 일반적으로 코드를 치기가 좀 더 편하다고 생각하면 된다.

그렇다면 어째서 더욱더 편한 최신언어들을 사용하지 않고 어째서 C++이라는 언어를 쓰는 걸까? 단순하다. C++은 그러한 매니지드 언어보다도 빠르기 때문이다. 하드웨어의 발전으로 아무리 언어의 처리능력이 낮다고 하더라도 고성능의 프로그램을 짜기 위해서는 기본적으로 처리능력이 빠르고 C++을 사용하게 되는 것이다.

 

1-2. C++을 배워야 하는가?

학습목표

1. C++의 주요 사용처에 대해서 알아보자.

2. 게임에서 C++을 사용하는 이유에 대해서 알아보자.

C++은 어디에 쓰이나? /

C++의 사용처는 많지만 주로 WINDOW OS에서 응용프로그램을 만들 때 사용된다. 그럼 응용프로그램은 무엇일까? 바로 그냥 모든 프로그램을 말한다. 게임, 채팅프로그램, 포토샵, 파워포인트 등등이 모두 OS위에서 실행되는 응용프로그램이다.

물론 C#이나 JAVA도 윈도우에서 간단한 응용프로그램을 만들 수 있지만 규모가 큰 게임을 만들기에 속력(퍼포먼스)가 부족하기 때문에 여러분들이 사용하는 게임엔진 등의 코어를 만드는데 사용되거나 한다.

한가지예로 여러분들이 C#을 배워야 사용할 수 있는 엔진인 유니티엔진은 실제 내부코어는 C++로 만들어지고 게임에 필요한 컨텐츠를 만드는데 C#을 사용하는 언어이다. 이는 일반적으로 배우기 어려운 언어인 C++로 코어를 만들고 프로그램을 처음 접하거나 본격적인 직업으로 생각하지 않는 사람들이 사용하기 쉽도록 C#등의 매니지드 언어를 스크립트 언어로 사용하는 경우이다. 하지만 본격적으로 게임업계에서 일을 하려고 하거나 게임업계에서 일을 하고자 한다면 C++은 장기적으로 바라봤을 때 최상의 언어라고 할 수 있다.

 

왜 게임에서 C++을 사용하는가? /

일단 결론부터 말하자면 잘 사용했을 시 퍼포먼스와 생산성이 양립하는 언어는 C++이 거의 유일하다고 할 수 있다. 이야기를 하자면 퍼포먼스에서는 C보다는 느리고 JAVAC#보다는 생산성이 약한 애매한 위치에 존재하고 있다.

하지만 그 애매함이 양쪽을 둘 다 신경써야하는 게임 같은 큰 프로젝트에서 강력한 힘을 발휘하게 된다. 특히나 만들어지는 게임 중 큰 스케일을 자랑하는 게임들은 대부분 C++로 만들어졌다고 생각해도 좋다.

특히나 언리얼엔진은 스크립트 언어도 C++로 짜야하기 때문에 게임업계에 종사하고 싶다면 익혀두면 거의 모든 게임회사에 통용된다고 볼 수 있다. 물론 그렇다면 C#같은 언어를 익히는 것이 도움이 안되는 것은 아니다. 하지만 절차지향과 객체지향을 모두 포함하고 있는 C++을 먼저 익힌다면 추후 C#을 익힐 때도 크게 도움이 된다.

그렇다면 마치 완벽한 언어처럼 C++을 소개했지만 단점이 없는 것일까? 아니다 C++은 다음의 단점들을 가지고 있다.

1. 익히기 어렵다.

C++은 익히기 어렵다. 다른 언어보다 배는 많은 문법들과 규칙을 가지고 있으며 객체지향과 절차지향을 모두 포함하기 위해서 메모리영역 등에 대해서 잘 알고 있어야 쉽게 사용하다. 같은 언 매니지드 언어인 C가 한눈을 팔지 않고 절차지향을 고수했다면 C++은 태생부터가 2가지 패러다임을 모두 사용하기 위해서 C를 포함하고 거기에 객체지향을 얹은 것 같은 모양새를 하고 있다.

그렇기 때문에 방대한 문법이 포진되어 있고 C처럼 단순하지도 C#이나 JAVA와 같은 편의성도 없다. 즉 양쪽을 모두 잡기 위해서 그만큼 문법이 방대해졌기에 그 많은 문법을 모두 익히고 기억하는 것이 힘들다. 그렇기 때문에 필수적인 문법에서 출발하여 특수한 상황과 언어들을 섭렵해나가는 방식으로 처리해야 한다.

2. 지속적으로 변한다.

프로그래밍 언어를 배우는 사람들이 간과하는 것이 있다면 언어 또한 프로그램라는 것이다. C++은 지속적으로 계속되는 업데이트를 통해서 지속적으로 변화하고 있고 현재는 20년도 표준이 발표된 시기이다. 한글이 2~3년마다 새로운 문법이 추가된다면 어떻겠는가? 하지만 C++은 아직도 지속적으로 새로운 문법들이 추가되고 있고 기존의 문법들과 호환성을 지키기 위해서 기존 문법들도 대부분 계속 지원하고 있다.

그러므로 C++을 주요 프로그래밍 언어로 사용하는 프로그래머는 지속적으로 C++을 공부해야하고 새로운 언어의 발전에 맞춰서 자기자신도 꾸준히 노력을 해야 실력을 유지할 수 있는 언어이다.