cosmic developer

[C++] 1. C++ 언어와 프로그래밍 방식 및 프로그램 작성 과정 본문

Programming Languages/C++

[C++] 1. C++ 언어와 프로그래밍 방식 및 프로그램 작성 과정

ti:bot 2020. 3. 7. 22:59

  보통 C언어를 먼저 공부하고 C++을 다음 단계로 하는지, 혹은 나처럼 C++을 바로 접하는지는 잘 모르겠다.

어쨌든 C++언어는 기존의 C언어를 유지 및 확장한 언어이다. 그래서 비슷한 점도 있고 다른점도 굉장히 많다.

나는 C++을 집중적으로 다룰 것이다. 이유는 그냥 더 익숙하니까!



#1. C++ 언어의 개발


  C++은 1980년대 초에 AT&T 벨연구소의 Bjarne Stroustrup에 의하여 개발되었다고 한다. 하지만 이런 것을 모두 외우고 다니는 개발자가 몇이나 있을까. 중요한 것은 클래스 개념을 추가하고, 가상 함수, 연산자 중복 정의, 다중 상속, 템플릿, 예외 처리 등의 기능이 차례로 추가되었다는 것이다. 또한, 절차 지향 프로그래밍, 데이터 추상화, 객체 지향 프로그래밍, 일반화 프로그래밍과 같은 여러 가지의 프로그래밍 기법을 지원한다. 그리고 프로그래머는 이를 자유롭게 선택할 수 있다. 그렇다면 각각의 프로그래밍 기법에 대해 알아보도록 하자.



#2. 프로그래밍 방식


절차적 프로그래밍

프로그램은 데이터와 알고리즘으로 이루어져있다고 말할 수 있다.

- 데이터(data) = 프로그램에서 사용하는 정보

- 알고리즘(algorithm) = 컴퓨터로 문제를 해결하는 절차


그리고 절차적 프로그래밍(procedural programming)은 데이터보다는 알고리즘. 즉, 절차를 작성하는 것에 더 치중하는 프로그래밍 기법이다.


  그런데 초창기 언어의 경우 무조건 특정한 위치로 이동하는 GOTO문을 많이 사용하다 보니 문장이 많아지게 되면 프로그램이 굉장히 난해해진다는 단점이 있었다. 이 문제를 해결하기 위해 구조화 프로그래밍(structural programming) 방법이 개발되었다. 무조건적인 점프를 없애고 몇 가지의 기본적인 구조(순차, 반복, 선택)만을 이용해 순차적으로 프로그램하는 방식이었다.

  이후 구조화 프로그래밍은 독립적인 모듈(module)이라는 단위(함수)로 나누어져 작성하는 기법으로 발전한다. 즉, 큰 문제를 작은 문제들로 계속 나누었으며, 이와 같은 방식은 하향식 설계(top-down)라고도 불린다. 그러나 여전히 데이터와 알고리즘은 분리되어 있었기 때문에 프로그램의 규모가 커지면 여전히 역부족이었다.


객체 지향 프로그래밍

이 방식은 데이터와 알고리즘을 묶어서 생각하기 때문에 위에 나타난 절차적 프로그래밍의 문제점을 해결한다.

객체 지향과 관련된 개념들을 정리해보자.


  • 클래스: 데이터를 나타낼 때 사용하는 도구. 데이터 외에 데이터를 처리하는 함수(알고리즘) 포함.
  • 캡슐화: 데이터와 알고리즘을 하나의 단위(클래스)로 묶는 것
  • 정보은닉: 데이터에 대한 불필요한 접근을 차단해 데이터를 보호함.
  • 상속: 비슷한 클래스가 이미 존재하는 경우, 그 클래스를 가져다가 사용하는 것
  • 다형성: 같은 이름의 함수나 연산자를 중복 정의하여서 상황에 따라서 가장 적절한 함수나 연산자를 프로그램이 자동적으로 선택

  낮은 수준의 클래스를 먼저 설계하고 생성된 객체를 바탕으로 높은 수준의 클래서 설계로 진행하는 방법을 상향식 설계(bottom-up)라고 한다.

어쨌든 위의 모든 개념들은 결국 하나의 공통적인 목표를 가진다.

'코드의 재사용'

결국 다른 사람들이 개발한 유용하고 신뢰성 있는 코드를 쉽게 가져와서 사용함으로써 시간을 단축하고 프로그램의 품질을 높이고자 한다는 것이다.


일반화 프로그래밍

  일반화 프로그래밍(generic programming)은 하나의 코드로 다양한 타입의 데이터를 처리하고자 한다. 알고리즘이 타입 매개 변수를 이용하여 작성되기 때문에 사용 시에 특정한 타입으로 지정될 수 있다.

위 특징에 따라서 동일한 작업을 여러 타입에 대해 실행할 함수를 작성할 때 유용하다. 이러한 경우 코드의 중복을 막을 수 있다는 장점이 있다.



#3. 프로그램 작성 과정


① 편집 단계 (에디터)

- 원하는 작업의 내용을 기술하여 소스 코드 작성

- 소스 파일 생성 .cpp


② 컴파일 (컴파일러)

- 소스 파일을 기계어로 변환

- 오브젝트 파일 생성 .obj


③ 링크 (링커)

- 오브젝트 파일들을 라이브러리 파일들과 연결

- 실행 파일 생성 .exe


④ 실행

- 만들어진 프로그램을 실행

- 실행 결과가 잘못되었다면 실행을 중단하고 다시 편집 단계로 돌아가 소스 파일을 수정

'Programming Languages > C++' 카테고리의 다른 글

[C++] 0. 프로그램이란 무엇인가?  (2) 2020.03.07