[1] C++ 언어의 주요한 설계 목표
C++ 언어의 기본적인 설계 목표에 대해 알아보자.
- C 언어로 작성된 프로그램과의 호환성(compatability)을 유지한다. 기존에 작성된 C 프로그램을 그대로 사용할 수 있도록 C 언어의 문법적 체계를 그대로 계승한다. 또한 C 언어로 작성되어 컴파일된 목적 파일(object file)이나 라이브러리(library)를 C++ 프로그램에서 링크하여 사용할 수 있도록 한다.
- 소프트웨어의 재사용을 통해 소프트웨어 생산성을 높이고, 복잡하고 큰 규모의 소프트웨어 작성, 관리, 유지 보수를 쉽게 하기 위해 데이터 캡슐화, 상속, 다형성등 객체 지향 개념을 도입한다.
- 타입 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 돕는다.
- 실행 시간의 효율성 저하를 최소화한다. 객체 지향 개념의 도입으로 멤버 함수의 호출이 잦아지고 이로 인해 실행 시간이 저하되는 비효율성을 막기 위해 멤버 함수에 인라인 함수를 도입하는 등 함수 호출로 인한 시간 저하를 막는다.
[2] C 언어에 추가한 기능
C++ 언어는 C 언어의 문법적 규칙을 그대로 승계하며, 프로그래밍의 편리와 다양성을 위해 다음과 같은 기능을 추가하였다.
- 함수 중복(function overloading) - 매개 변수의 개수나 타입이 서로 다른 동일한 이름의 함수들을 선언할 수 있게 한다.
- 디폴트 매개 변수(default parameter) - 매개 변수에 값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수를 선언할 수 있게 한다.
- 참조(reference)와 참조 변수 - 변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입한다.
- 참조에 의한 호출(call-by-reference) - 함수 호출시 참조를 전달할 수 있게 한다.
- new와 delete 연산자 - 동적 메모리 할당, 해제를 위한 new, delete 연산자를 도입한다.
- 연산자 재정의(operator overloading) - 기존의 연산자에 새로운 연산을 정의할 수 있게 한다.
- 제네릭 함수와 클래스(generics) - 함수나 클래스를 데이터 타입에 의존하지 않고 일반화시킬 수 있게 한다.
[3] C++의 객체 지향 특성
C++는 객체 지향 언어로서 다음과 같은 객체 지향 특성을 가지고 있다.
- 객체의 캡슐화(Encapsulation)
캡슐화는 데이터를 캡슐로 싸서 외부의 접근으로부터 데이터를 보호하는 객체 지향 특성이다. C++에서 캡슐의 역할을 하는 것이 클래스이며 class 키워드를 이용하여 작성한다. 클래스는 객체를 정의하는 틀이며, 객체는 클래스라는 틀에서 생겨난 실체(instance)이다. C++ 클래스는 멤버 변수들과 멤버 함수들로 이루어지며, 멤버들은 캡슐 외부에 공개하거나(public), 보이지 않게(private) 선언할 수 있다. 이중 공개된 멤버들만 외부 객체들이 접근할 수 있다. C++ 프로그램 개발 시, 멤버 변수들은 외부에 보이지 않게(private) 선언하여 외부에 노출시키지 않는 것이 좋다. 대신 일부 멤버 함수들을 외부에 공개하여(public), 이 멤버 함수를 통해서 멤버 변수에 간접적으로 접근하게 한다.
- 상속성(Inheritance)
객체 지향 언어에서 상속이란, 자식이 부모로부터 유산을 물려받는 개념이라기보다는, 자식이 부모의 유전자를 물려받는 것과 유사하다. C++에서 상속은 객체를 정의하는 클래스 사이에 상속 관계를 두어, 자식 클래스의 객체가 생성될 때 자식 클래스에 선언된 멤버뿐 아니라 부모 클래스에 선언된 멤버들도 함께 가지고 탄생하게 한다. 상속은 구현된 코드의 재사용성을 높여서 소프트웨어 생산성을 높인다.
- 다형성(Polymorphism)
다형성은 하나의 기능이 경우에 따라 서로 다르게 보이거나 다르게 작동하는 현상을 일컫는다. 다형성의 한 예로서 더하기 연산자(+)를 보자. + 연산자는 다음과 같이 정수 덧셈이나 문자열 연결(concatenation), 객체 더하기 등 피연산자에 따라 서로 다른 연산이 이루어질 수 있다.
2 + 3 -> 5
"남자" + "여자" -> "남자여자"
redColor 객체 + blueColor 객체 -> purpleColor 객체
이것을 C++에서는 연산자 중복(operator overloading)이라고 부른다. 또한 같은 이름의 함수가 매개 변수의 개수나 타입이 다르면 서로 다른 함수로 인식되는 함수 중복(function overloading)도 다형성의 하나이다. 다음 3개의 함수 add()는 C++에서 서로 다른 함수로 다루어진다.
void add(int a, int b) { ... }
void add(int a, int b, int c) { ... }
void add(int a, double d) { ... }
C++에서 다형성은 상속 관계에서도 나타난다. 동물이라는 부모 클래스가 있고, 강아지, 고양이, 닭이 동물 클래스를 상속받는다고 하자. 부모 클래스에는 '소리내기'라는 함수가 있고 각각 강아지는 '멍멍', 고양이는 '냐옹', 닭은 '꼬끼오'라고 부모 클래스의 '소리내기' 함수를 재정의 하였다면 이를 함수 재정의 혹은 함수 오버라이딩(function overriding)이라 부른다.
출처
- 명품 C++ 프로그래밍 책
'C, C++ > C, C++' 카테고리의 다른 글
[C] bit 연산 (0) | 2022.03.24 |
---|---|
[C++] '\n' 과 endl 차이 (0) | 2022.03.02 |
[C] 4가지의 메모리 저장소 (스택, 힙, 데이터, 코드 영역) (0) | 2022.01.30 |
[C] C언어에서 음수를 표현하는 방법 (0) | 2022.01.07 |
컴파일(Compile) 과정 (0) | 2022.01.05 |