본문 바로가기

개발 공부/C++

(new) 따라하며 배우는 C++ 0. 시작해봅시다

0. 시작해봅시다

 

0.0 C++ 꼭 공부해야 할까?

좋은 예술가는 베낀다. 위대한 예술가는 훔친다 - 피카소

편안한 마음으로 프로그래밍을 베껴서 하면 훌륭한 프로그래머가 될 수 있다.

- 올바른 타이핑 방법을 연습한다

- 간단한 개념을 이해한다 : 처음부터 큰 나무를 심으려고 노력할 필요 없다.

- 예제를 따라 해본다.

- 문제가 생기면 해결한다.

- 예제를 내 맘대로 바꿔본다.

 

0.1 프로그래밍 언어란?

기계어 Machine Language : 컴퓨터는 전자 기계로, 컴퓨터는 전자 회로이므로 전압의 차이로 신호를 인식한다. 즉 높다, 낮다 차이로 이것을 0과 1로 변환하여 인식을 하는 것이다.

프로그래밍 할 때는 기계어를 잘 사용하지 않는다. 하드웨어에 가까움.

 

어셈블리 언어 Assembly Language : CPU 단위 기능이나 메모리 영역을 직접적으로 제어할 수 있는 저수준의 언어. 기계어보다 고수준에 가깝지만 인간의 언어론 이해하기가 어렵다. 속도를 빠르게 하기 위해 중간중간 어셈블리 언어를 삽입하는 경우가 많았다.

 

고수준 언어 High-Level Languages : 일반적인 프로그래밍 언어. 사람 언어에 가까움. 어떤 프로그램을 개발하느냐에 따라 고수준이 좋을 수도 있고 저수준이 좋을 수도 있다. C나 C++를 중간레벨이라고 부르는 경우도 있다. 최근에는 인간이 프로그래밍하기 좋은 언어가 많이 생성되기 때문이다.

 

컴파일러 Compiler

고수준 언어로 쓰여진 코드를 기계어로 번역하는 프로그램을 컴파일러라고 한다.

작성한 소스 코드를 번역해서 실행 파일을 만들어주고, 이 실행 파일이 우리가 만들고자 했던 실행 파일이다.

실행 파일은 하드웨어에 저장된다. 중앙처리장치와 메모리를 통해 실행 결과를 확인할 수도 있게 된다.

C나 C++ 같은 컴파일러 언어는 실행 파일이 대부분 저장된다

 

인터프리터Interpreter

실행 파일이 저장되지 않는다. 

인터프리터 언어에서 작성했던 언어는 주로 script라고 부르는 경향이 있었다(최근에는 code로 대체되는 추세)

실행 파일이 만들어지지 않으므로 컴파일러 언어보단 느리다. 매번 실행 시마다 인터프리터를 거쳐야 하기 때문이다. 컴파일러 언어는 한번 실행하면 실행 파일을 계속 불러 쓸 수 있다.

 

이식성 Portablility

컴파일러 언어의 경우 운영체제, 언어마다 컴파일러가 다른 경우가 많다.

실행파일도 두 개가 호환되지 않는 경우가 많다(장기적으로는 장벽이 허물어지고 있는 추세긴 하다)

 

자바같은 경우, 소스 파일을 컴파일하면 바이트 코드가 생성되며 이 바이트 코드는 어떤 운영체제의 가상기계이든 읽을 수 있다. 그러나 이 바이트 코드를 읽는 가상기계는 운영체제마다 다를 수 있다. 

 

 

 

0.2 C, C++ 언어 소개

 

C++ 이전에 C가 있었다(by Dennis Litch)

C++는 C에 객체 지향 개념이 추가된, C언어가 확장된 형태이다(By Bjane 스트록)

 

C/C++ 언어의 설계 철학

"프로그래머를 믿어라"

실제 세계에서 쓸모가 있어야 한다

프로그래머가 스스로 스타일을 선택할 수 있어야 한다.

유용한 기능을 추가하는 것이 오용보다 더 중요하다.

프로그래머의 의도를 알 수 없다면 스스로 명시하게 한다. -- 최근에는 일단 작동부터 하는 것이 추세.

C++ 아래에 다른 언어 없다(어셈블리어 예외) -- 파이썬 내부는 또 C++로 만들어져 있다. 대부분의 언어는 더 상위 레벨이다.

 

0.3 프로그래밍 과정 소개

- 풀어야 할 문제를 정의한다

- 해법을 설계한다(플래닝)

- 해법을 구현하는 프로그램을 작성한다write

- 프로그램을 컴파일compile한다

 

g++ -c file1.cpp file2.cpp file3.cpp

소스파일(.cpp) -> 컴파일 -> 오브젝트 파일(.o) (윈도우스는 .obj)

 

- 오브젝트 Object 파일들을 링킹 Linking한다

 

컴파일하면 여러 개의 오브젝트 파일이 생기는데, 링커가 이 오브젝트 파일들을 합쳐서 실행파일로 만든다.

런타임 서포트Runtime Support가 다른 라이브러리를 참조해줄 수도 있다.

 

- 테스트해보고 문제가 있으면 고친다.

예전에는 종이에 구멍을 뚫어서 프로그램을 만들었다. 어느 날 그 구멍에 벌레가 끼어 있어서 프로그램에 에러가 났다. 그렇게 해서 유래된 것이 버그와 디버깅(벌레를 제거해서 에러를 고치는 행위).

 

 

0.4.0 통합개발환경의 기본적인 사용법 - 윈도우즈 비쥬얼 스튜디어

 

VS Community 다운로드 - Desktop development with C++ 반드시 체크해서 설치

Language packs에서 영어를 미리 받아두면 편하다.

Microsoft 계정을 만들어 로그인하고 사용하는 것을 권장

 

New - New Project - Visual C++ - Windows Desktop - Windows Desktop World -> OK

솔루션 밑에 프로젝트가 있고, 프로젝트 밑에 여러개의 소스 파일을 만들 수 있다.

 

 

 

부등호를 angle bracket이나 carrot이라 부르기도 한다.

< : left angle bracket, left carrot

> : right angle bracket, right carrot

 

source.cpp가 컴파일 되어 프로젝트 파일이 실행 파일로 되었다는 뜻. Debug Win32는 컴퓨터 운영체제 환경

 

파일 경로를 확인 가능

vcxproj -> 프로젝트 정보

obj 파일 확인 가능

 

Debug 폴더에서 실행 파일도 확인 가능

 

 

 

-- 터미널에서 실행시키기

 

 

위 명령을 실행하면 실행 파일을 터미널에서 실행시킬 수 있다 (Tab 키를 누르면 자동 완성도 가능)

 

<< -- stream

:: -- namespace

cout~endl까지 입력함으로써 문자 출력 가능.

 

Debugging혹은 Start without Debugging 클릭.

Ctrl + F5 즉 자동 빌드를 하는 것을 권장한다.

디버그/릴리즈 모드의 차이는 이러하다 : 디버그의 실행 파일의 용량이 더 높고, 속도가 더 느리다.

디버그 모드는 프로그래머가 디버깅 할 수 있도록 추가 정보가 함께 저장된다.

릴리즈가 속도가 더 빠르다. 배포를 할 경우, 즉 실사용자들이 사용할 때 빌드가 되는 방식.

 

x64는 메모리를 많이 잡아먹는 경우가 많지만 최근엔 컴퓨터가 빨라져서 상관없다.

 

0.4.1 통합개발환경의 기본적인 사용법 - 윈도우즈 리눅스 코드 블럭스

 

http://codeblocks.org/downloads/26

 

Download binary

Please select a setup package depending on your platform: NOTE: For older OS'es use older releases. There are releases for many OS version and platforms on the Sourceforge.net page. NOTE: There are also more recent nightly builds available in the forums or

codeblocks.org

 

File > New > Project > Empty Project

 

위에서 컴파일러와 폴더 경로 커스터마이징 가능

위 프로그램은 오브젝트 파일로 확장자 o를 쓴다!

 

0.4.3 비쥬얼 스튜디오 솔루션, 프로젝트 관리

솔루션 안에 여러 개의 프로젝트 생성도 가능

프로젝트가 여러 개 있을 경우 컴파일러가 빌드 후 실행 파일을 Solution 폴더 밑으로 넣어둔다.

프로젝트가 여러 개 있을 경우, 두꺼운 글씨로 써져 있는 프로젝트의 실행 파일이 실행된다.

"시작 프로그램으로 설정(set as startup program)"으로 설정 변경 가능

Sln 파일은 건들지 말고 맘에 안드는 프로젝트 폴더를 지우면 된다

Build - Clean Solution을 하면 좋다

 

 

0.5 코딩하다 막혔을 때는?

 

 

당황하지도 분노하지도 말자.

IDE의 도움을 받는다

검색엔진의 도움을 받는다

커뮤니티의 도움을 받는다