C++ Primer 01
학습목표
- 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++은 세 가지 프로그래밍 방식이 결합된 언어임
- C의 절차적 언어(procedural language) 방식
- C에 클래스를 추가하여 실현하는 객체 지향 언어(object-oriented language) 방식
- C++의 템플릿이 지원하는 일반화 프로그래밍 방식
- 규모가 큰 프로그래밍을 위해 객체 지향 프로그래밍(OOP) 등장
- 절차적 프로그래밍과 달리 데이터를 강조
- 장점
- 소스 코드의 재활용이 쉬움
- 정보를 은닉할 수 있어 비인가된 접근으로부터 데이터를 보호할 수 있음
- 다형(polymorphism)을 이용하여 이름이 같은 연산자와 함수를 여러개 정의 가능 - 상황에 따라 적당한 연산자 및 함수를 프로그램이 스스로 선택 가능
- 상속(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++을 더 쉽게 배우고 사용하기 위한 많은 언어적 특성 추가
프로그램 작성 절차
- 소스 코드 파일 작성
프로그래머 및 컴파일러가 해당 코드가 C++ 소스 코드임을 알 수 있도록 접미어를 붙여야함
접미어로 붙는 확장자 형식은 사용하는 C++ 컴파일러에 따라 달라짐 - 컴파일 컴파일러가 소스 코드를 컴퓨터 내부에서 사용하는 기계어로 번역하여 목적 코드(object code)를 생성
- 링크 목적 코드에 부가적인 코드(C++ 라이브러리의 함수 등)를 링크하여 실행 코드(executable code)를 생성