C++ 언어 설계 목표
1. C언어로 작성된 프로그램과의 호환성(Compatability)을 유지한다.
-> C언어의 문법체계를 계승한다.
2. 소프트웨어의 재사용성을 통해 소프트웨어 생산성을 높이고, 큰 규모의 소프트웨어 작성, 관리, 유지보수를 쉽게 하기위해 데이터 캡슐화, 상속, 다형성 등 객체 지향 개념을 도입한다.
3. 타입체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 한다.
4. 실행 시간의 효율성 저하를 최소화한다.
-> 객체 지향 개념의 도입으로 멤버 함수의 호출이 잦아지고, 이로인해 발생하는 실행 시간 저하의 비효율성을 막기위해 인라인 함수의 도입 등 함수 호출로 인한 시간저하를 막는다.
C++의 객체 지향 특성
1. 객체와 캡슐화(Encapsulation) - 자료은닉
캡슐화 : 데이터를 캡슐로 싸서 외부의 접근으로부터
데이터를 보호하는 객체 지향의 특성이다.
C++에서 캡슐 역할을 하는 것은 Class, Class는 객체를 정의하는 틀
1) 객체는 클래스라는 틀에서 생겨난 실체(instance)이다.
2) C++의 클래스는 멤버 변수와 멤버 함수들로 이뤄지고 멤버들은 캡슐외부에 공개(public)하거나, 보이지 않게(private) 선언할 수 있다. 이중 공개된 것만 외부에서 접근할 수 있다.
* 멤버변수들은 외부에 노출시키지 않는것이 좋다. 대신 일부 멤버 함수들은외부에 공개해 이 멤버 함수를 통해 멤버 변수에 간접적으로 접근하도록 한다.
2. 상속성(Inheritance) - 재사용성
객체 지향에서 상속이란 자식이 부모의 유전자를 물려받은 것과 유사하다.
1) 자식클래스의 객체가 생성될 때 자식 클래스에 선언 된 멤버 뿐만 아니라 부모클래스에 선언된 멤버들도 함께 가지고 생성된다.
2) 중복되는 부분을 줄일 수 있다. 비슷한 일을 하는 것들을 묶어 생산성을 높인다.
* 상속은 구현된 코드의 재사용성을 높여서 소프트웨어의 생산성을 높인다.
3. 다형성(Polymorphism)
하나의 인터페이스에 처한 상황에 따라 다른 역할이나 의미를 지니게 되는 것을 말한다.
하나의 기능이 경우에 따라 서로 다르게 보이거나 다르게 작동하는 현상을 일컫는다.
ex) 한 사람의 여러 사회적 직책 - 같은 사람이 누구에게는 자식이되고, 부모가되고, 직장상사가 되고, 부하직원이 되는 것.
* 같은 이름의 함수가 매개 변수나 타입이 다르면 서로 다른 함수로 인식되는 함수중복(function overloading)도 다형성의 하나이다
* 상속관계의 함수오버라이딩(function overriding)도 다형성이다.
C++언어와 제네릭 프로그래밍
제네릭(Generic programming)
동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있도록 함수와 클래스를 일반화 시킨 제네릭 함수와 제네릭 클래스를 만들고 개발자가 원하는 타입을 적용시켜 프로그램 코드를 틀에서 찍어내듯이 생산하는 기법.
* C언어와 C++의 차이를 말하라고 할 때 "C는 절차적, 구조적 프로그래밍 언어이고, C++은 객체 지향적 프로그래밍 언어다.!" 라고 주로 나누는데, C언어에서도 struct를 통해 객체지향을 구현할 수 있고, 마찬가지로 C++ 또한 절차적, 구조적 프로그래밍을 할 수 있다.
그래서 근본적인 차이를 따저보면 C++은 클래스로 인한 객체지향만이 특징이 아니라, 템플릿으로 대변되는 제네릭 프로그래밍이라는 특성을 가지고 있다는 것이 C언어와 C++의 큰 차이점이라 생각한다. <- 중요하다!!
[출처] [C++] C++ 특징|작성자 신구님
출처 : http://blog.naver.com/kim1bon/220553379401
'개발관련 > C언어' 카테고리의 다른 글
일차원, 2차원 배열 동적할당 (0) | 2015.11.11 |
---|---|
수분할 (0) | 2015.11.06 |
소수판별하기 (0) | 2015.11.04 |
입력된 수를 반대로 출력하기 (0) | 2015.11.04 |
단순연결리스트 (0) | 2015.10.01 |
댓글