혼자 연구하는 C/C++ 1장 정리(프로그래밍 입문)

2015. 2. 26. 20:37창고

728x90
728x90

1. 프로그램이란?

문제를 풀기 위한 명령들의 조직적인 집합.

주어진 문제나 목적을 효율적으로 해결하기 위해 프로그래밍 도구를 이용하여

순서와 절차에 맞게 명령들의 집합을 만들어 내는 과정

2. 프로그래머

프로그램을 만드는 사람. 사용자와 컴퓨터 사이를 중계하는 통역자!

기계의 언어를 다루어야 하므로 기계의 구조와 동작 방식을 잘 이해해야함.

 

문법 - 프로그램을 구성하는 단위가 명령. 명령을 규칙에 맞게 정확하게 작성하는 지식이 필요.

작문 - 단순한 명령의 나열이 아니라 조직적인 집합이므로 작성한 명령을 논리적으로 배치하는 기술이 필요.


3. 프로그래밍 언어

컴퓨터에게 일을 시키려면 컴퓨터와 사람의사소통을 할 수 있는 도구.

각 언어들은 나름대로의 장점과 단점을 가지는데 프로그래머는 이 중 자신의 목적에 맞는 언어를 선택.

 

저급 언어(Low Level) : 기계의 언어에 가까우며 사용하기 어렵지만 성능이 좋다. 어셈블리.

고급 언어(High Level) : 인간의 언어에 가까우며 배우기 쉽지만 대신 성능이 떨어진다. 베이직 언어.

 

4. C/C++ 역사

- 1972. 벨 연구소의 데니스 리치에 의해 만들어짐.

- 어셈블리의 강력한 기능과 고급언어의 이식성을 동시에 갖춘 새로운 언어.

- ALGOL>BCPL>B>C>C++ 순서로 발전.

- C언어가 등장함으로써 당시 모든 언어가 의미를 잃게 됨.(패왕급 언어)

- C에서 파생된 다양한 컴파일러가 발표.

 

미 표준 위원회 ANISI에서 83년부터 표준 제정 작업에 들어가 89년에 표준안, 90년에 ISO에 승인.

그 이전은 모두 클래식 C라고 부름.

 

클래식 C에서 추가 된 기능.

- 표준 라이브러리 함수를 규격화, 헤더 파일을 통일.

- 함수의 원형 선언 기능이 추가, 컴파일러가 함수 호출부에서 타입 체크가 가능.

- 정수, 실수 상수의 타입을 지정할 수 있는 L,U,F 등의 접미어가 추가.

- enum, void 형과 const, volatile 제한자가 추가.

- 인접 문자열 상수를 합쳐 주고 확장열 추가.

- 함수 내부에서 선언하는 지역 배열, 구조체 초기화 기능.

- 구조체끼리 대입 시 크기만큼 메모리 복사.

 

5. C++의 등장

- 1980년대 초 벨 연구소의 비얀 스트로스트룹이 만듬.

- 소프트웨어 위기 문제로 인해 OOP의 필요성 강조.

- C++가 C를 완전히 포함하지 못하는 것은 이식성이 문제되거나 더 좋은 방법이 있어 빠진 기능.

 

http://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EC%9C%84%EA%B8%B0

소프트웨어 위기 위키


C에서 추가된 대표적 문법.

- 한줄 주석 //

- 진위형 bool 타입

- 구조체나 열거형의 태그가 타입으로 승격

- 함수 중가에 변수를 선언 가능


C인가 C++인가?

프로젝트의 성격에 따라 결정. 대부분이 C++가 좋은 선택.

하지만 소규모 프로젝트일 경우 C++가 더 느린면이 있다.

닭 잡는데 소 잡는 칼을 쓸 필요가 없다. C로 구현!

 

6. C/C++의 장점, 언어의 특징

성능 지향의 범용 언어!

- 문법이 간결

- 효율성이 좋아 대규모의 고기능 프로그램을 제작

- 운영체제 개발을 목적으로 만든 언어이므로 저수준 프로그래밍이 가능

- 모든 분야에 두루 활용할 수 있는 범용성

- 성능을 위해 불필요한 에러 처리를 하지 않음

- 이식성이 좋음

 

단점?

- 베이직이나 그래픽 기반의 툴보다는 배우기가 어렵다.

- 가비지 컬렉터 기능이 없다.

- 실습의 재미가 없는편...(? 실습은 재밌다!)

 

그럼 우리는 왜 처음 C/C++를 배우는가?

- 대중성 : 널리 이롭게 사용되기 때문이다. 알고리즘이나 이론에 대한 설명문서, 소스도 습득하기 유리하다.

- 기본 개발 언어 : 대부분의 개발사들이 기본 개발 언어로 채택한다. 배운 지식을 실무에 곧바로 활용할 수 있다.

 

C/C++은 자바나 C#에 비해 완전한 객체 지향 언어가 아닌 혼합형 언어이다.

 

7. 어떤 순서로 학습을 해야할까?

C/C++는 API의 선수 과목. 두 과목을 배우기 전에 C를 반드시 먼저 배워야 한다.

API는 모두 MFC의 선수 과목이고 앞의 세 과목에 대한 기본적인이해가 반드시 필요.

C -> C++ -> API -> MFC

   -> API  -> C++ ->

 

DB : SQL, ODBC, OLE DB, DAO, ADO, 오라클, SQL 서버

게임 제작 : DirectX, 3D 그래픽 라이브러리, 전산 수학

시스템 프로그래밍 : DDK, 컴파일러, 운영체제

네트워크 : 소켓, 각종 프로토콜(FTP, HHTP)

웹 프로그래밍 : ASP, JSP, PHP, XML, 포토샵, 플래시, DB

 

교양적 과목 - 자료구조, 알고리즘, 소프트웨어 공학 등

고급기술 - 인공지능, 화상처리, 멀티미디어 등


8. 컴파일러란?

프로그래머가 작성한 고급언어로 된 소스코드를 컴퓨터가 이해할 수 있는 기계어 코드로 번역 하는 동작을 컴파일.

컴파일을 하는 프로그램을 컴파일러.

 

고급 언어 명령을 해석>기계어 코드로 변환>이를 기록한 목적파일 생성.

 

목적 파일을 실행 파일로 바꾸기 위해 스타트업이라는 추가코드를 가져야 함.

이렇게 변환해주는 과정을 링크라 하며 이 프로그램을 링커라 부름.

 

컴파일과 링크를 통해 실행 파일을 만드는 과정을 빌드!


어떤 컴파일러들이 있을까?

도스용 - 터보 C, 볼랜드 C++, MS C

윈도우즈용 - 비주얼 C++, 볼랜드 C++, LCC, 왓콤 C, Dev-C++

유닉스용 - gcc




728x90
반응형