학습목표

  • C와 C++ 언어의 역사와 철학
  • 절차적 프로그래밍과 객체 지향 프로그래밍
  • C++가 C언어에 추가한 객체 지향 개념
  • C++가 C언어에 추가한 일반화 프로그래밍 개념
  • 프로그래밍 언어의 표준
  • 프로그램 작성 요령

C

Unix 운영체제를 만들기 위해 필요했던 고수준 언어로 탄생한것이 C언어
저수준 언어의 효율성 및 하드웨어 접근 능력 + 고수준 언어의 일반성과 이식성이 결합됨
  • 고수준(high-level) 언어 : 특정 하드웨어에 종속되지 않고 여러 종류의 컴파일러를 사용하여 각각의 컴퓨터에 맞는 내부적인 기계어로 쉽게 바꿀 수 있음
C는 절차적 언어(procedural language)이기 때문에 데이터보다 알고리즘에 치중함
컴퓨터가 수행해야 할 동작들을 명확히 구분한 후 구분된 동작들을 프로그래밍 언어로 구현하는 방식
  • 데이터(data) : 프로그램이 사용하고 처리하는 정보
  • 알고리즘(algorithm) : 프로그램이 데이터를 처리하는 방법
C는 구조적 프로그래밍(structured programming)을 지원함
for, while, do while, if else 등의 구문을 통해 GOTO문의 결점 제거
C는 하향식(top-down) 설계를 고수함
규모가 큰 프로그램을 작고 다루기 쉬운 단위 작업들로 쪼개어 접근 - 개별적인 작업을 수행하는 함수 단위로 프로그램 개발

C++

C++은 세 가지 프로그래밍 방식이 결합된 언어임

  1. C의 절차적 언어(procedural language) 방식
  2. C에 클래스를 추가하여 실현하는 객체 지향 언어(object-oriented language) 방식
  3. C++의 템플릿이 지원하는 일반화 프로그래밍 방식
규모가 큰 프로그래밍을 위해 객체 지향 프로그래밍(OOP) 등장
절차적 프로그래밍과 달리 데이터를 강조
  • 장점
    1. 소스 코드의 재활용이 쉬움
    2. 정보를 은닉할 수 있어 비인가된 접근으로부터 데이터를 보호할 수 있음
    3. 다형(polymorphism)을 이용하여 이름이 같은 연산자와 함수를 여러개 정의 가능 - 상황에 따라 적당한 연산자 및 함수를 프로그램이 스스로 선택 가능
    4. 상속(inheritance)을 이용하여 하나의 클래스로부터 새로운 클래스를 유도
  • 클래스(class) : C++에서 언어 자체를 해결해야 할 문제에 맞추기 위해 문제의 특성에 맞게 설계된 데이터형
    객체를 나타내는 데이터 부분 / 데이터를 대상으로 수행할 수 있는 동작 부분으로 정의
  • 객체(object) : 클래스에 의해 만들어지는 특정한 데이터 구조
C++은 상향식(bottom-up) 프로그래밍을 사용
저수준의 클래스를 먼저 설계한 후에 고수준의 프로그램 설계로 진행
C++은 일반화(generic) 프로그래밍을 강조
일반화란 데이터형과 무관한 코드를 작성함을 의미
  • OOP와 같이 소스코드의 손쉬운 재사용을 목표로하며 포괄 개념의 추상화 기술을 공유함
  • OOP와 달리 알고리즘 측면을 강조 - 큰 프로젝트가 아닌 일반적인 작업을 할 때는 일반화 프로그래밍이 편리함
C++은 C를 기초로 하여 거의 변형시키지 않고 OOP 및 템플릿을 통한 일반화 프로그래밍 기능을 추가하여 만들어진 언어임
기존의 C 라이브러리들을 그대로 사용할 수 잇음

이식성을 확보하기 위해 C++의 표준화 작업이 이루어짐

  • 가장 처음 C++98으로 정립 - 예외 처리, RTTI(runtime type identification), 템플릿, STL(Standard Template Libarary) 등의 특성 추가
  • 2003년 C++ 표준 제 2판인 C++03 정립 - 오탈자 및 모호한 문구 수정 정도만
  • 2011년 C++11 정립 - C++을 더 쉽게 배우고 사용하기 위한 많은 언어적 특성 추가

프로그램 작성 절차

  1. 소스 코드 파일 작성
    프로그래머 및 컴파일러가 해당 코드가 C++ 소스 코드임을 알 수 있도록 접미어를 붙여야함
    접미어로 붙는 확장자 형식은 사용하는 C++ 컴파일러에 따라 달라짐
  2. 컴파일 컴파일러가 소스 코드를 컴퓨터 내부에서 사용하는 기계어로 번역하여 목적 코드(object code)를 생성
  3. 링크 목적 코드에 부가적인 코드(C++ 라이브러리의 함수 등)를 링크하여 실행 코드(executable code)를 생성

Tags:

Categories:

Updated: