기존에 사용되던 C언어는 1972년부터 사용되어왔습니다. 하지만 시대를 거듭할수록 단순 계산뿐만이 아닌 프로그램을 구동시키기 위한 언어가 필요하였고, C언어의 한계를 극복하기 위하여 1979년부터 객체 지향 특성및 기능을 추가한 새로운 언어를 개발하였고 1983년에 C++로 정의되었습니다.
-C++언어는 C 언어의 모든 기능을 가지고 있기 때문에 이미 작성된 C소스 프로그램은 C++프로그램으로 재사용이 가능하고 C목적 코드도 C++ 프로그램에서 링크하여 사용이 가능합니다.
-
C++ 언어의 특징
-C언어로 작성된 프로그램과의 호환성을 유지.
-소프트웨어의 재사용을 통해 소프트웨어 생산성을 높이고, 복잡하고 큰 규모의 소프트웨어 작성, 관리, 유지보수를 쉽가하기위해 데이터 캡슐화, 상속, 다형성등의 객체 지향 개념을 도입한다.
-타입 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 돕는다.
- 실행 시간의 효율성 저하를 최소화한다.
C++에 추가된 기능
함수 중복 : 매개 변수의 개수나 타입이 서로 다른 동일한 이름의 함수들을 선언할 수 있게 한다.
디폴트 매개 변수 : 매개 변수에 값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수를 선얼할 수 있게 한다.
참조 : 변수에 별명을 붙여 변수 공간을 같이 사용할수 있는 참조의 개념을 도입.
참조에 의한 호출 : 함수 호출시 참조를 전달할 수 있게 한다.
new와 delete 연산자 : 동적 메모리 할당, 해제를 위한 new, delete 연산자를 도입한다.
연산자 재정의 : 기존의 연산자에 새로운 연산을 정의할 수 있게 한다.
제네릭 함수와 클래스 : 함수나 클래스를 데이터 타입에 의존하지 않고 일반화 시킬 수 있게 한다.
C++의 객체 지향 특성
그전에 캡슐화는 데이터를 캡슐로 싸서 외부의 접근으로부터 데이터를 보호하는 객체 지향 특성입니다.
C++에서의 캡슐은 클래스라고 정의합니다. class키워드를 사용하며, 객체를 정의합니다.
객체는 클래스라는 틀에서 생겨난 실체이며
C++클래스는 멤버변수, 멤버함수로 이루어지며 각 멤버들은 공개(public),비공개(private)로 선언가능합니다.
1 2 3 4 5 6 7 8 | class Circle { private: int radius; //반지름 값 비공개 public: Circle(int r) { radius = r; } double getArea() { return 3.14 * radius * radius } }; | cs |
상속성
자식이 부모의 유전자를 물려받는것과 비슷합니다. C++에서는 클래스사이에 상속 관계를 두어, 부모 클래스에 선언된 멤버들도 함께 가지고 탄생하게됩니다.
1 2 3 4 | class Phone { void call(); // 전화 걸기 void receive(); //전화 받기 }; | cs |
1 2 3 4 | class MobilePhone : public Phone { //Phone을 상속받는다. void connectWireless(); // 무선 기지국 연결 void recharge(); // 배터리 충전 }; | cs |
1 2 3 4 | class MusicPhone : public MobilePhone { //MobilePhone을 상속받는다. void dounloadMusic(); // 음악 다운 void play(); // 음악 재생 }; | cs |
다형성
하나의 기능이 경우에 따라 다르게 작동하는것입니다.
+연산자를 예로 들면, +연산자 하나로 문자열 연결, 객체 더하기등 피연산자에 따라 서로 다른 연산이 가능합니다.
1 2 3 | 2 + 3 ==> 5 "남자"+"여자" ==>"남자여자" | cs |
이러한 현상은 연산자 중복이라고합니다.
또한, 같은 이름의 함수가 매개 변수의 개수나 타입이 다르면 다른함수로 인식되는 함수 중복도 다형성의 하나이다..
1 2 3 | void add(int a, int b) {...} void add(int a, int b, int c) { ... } void add(int a, double d) { ... } | cs |
위 3개의 함수들은 모두 다른함수로 다루어진다.
C++에서 객체 지향을 도입한 목적
- 소프트 웨어 생산성 향상
- 쉬운 모델링
설차 지향와 객체 지향
절차 지향
객체 지향