IT

C++ 언어의 특징

miro999 2022. 2. 4. 17:54
반응형

C++은 C언어에 객체 지향 특성 (object oriented programming) 및 기능을 추가하여 1983년에서 1985년 사이에 만들어졌다. 이러한 C++의 기본적인 설계 목표와 특징에 대해 알아보자.

  • C++ 설계 목표



1. C 언어로 작성된 프로그램과의 호환성 (compatability)을 유지한다. 기존에 작성된 C 프로그램을 그대로 사용할 수 있도록 C 언어의 문법적 체계를 그대로 계승한다. 또한 C 언어로 작성되어 컴파일된 목적 파일 (object file)이나 라이브러리 ( library)를 C++프로그램에서 링크하여 사용할 수 있도록 한다.


2. 소프트웨어의 재사용을 통해 소프트웨어 생산성을 높이고, 복잡하고 큰 규모의 소프트웨어 작성, 관리, 유지 보수를 쉽게 하기 위해 데이터 캡슐화, 상속, 다형성 등 객체 지향 개념을 도입한다.


3. 타입 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 돕는다.


4. 실행 시간의 효율성 저하를 최소화한다. 객체 지향 개념의 도입으로 멤버 함수의 호출이 잦아지고 이로 인해
발생하는 실행 시간 저하의 비효율성을 막기 위해 인라인 함수의 도입 등 함수 호출로 인한 시간 저하를 막는다.

  • C언어에 추가한 기능



c++ 언어는 C언어의 문법적 규칙을 그대로 계승하며, 프로그래밍의 편리와 다양성을 위해
다음과 같은 기능을 추가하였다.

- 인라인 함수 ( inline function )
자주 호출되는 함수의 경우 함수 호출 대신 함수 코드를 확장 삽입하는 방식이며,
실행 시간 단축에 유용하다.

- 함수 중복 ( function overloading )
매개 변수의 개수나 타입이 서로 다른 동일한 이름의 함수들을 선언할 수 있게 한다.

- 디폴트 매개변수 ( default parameter )
매개변수에 값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수를 선언할 수 있게 한다.

- 참조 ( reference) 와 참조 변수
변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입한다.

- 참조에 의한 호출 ( call - by - reference )
함수 호출시 참조를 전달할 수 있게한다.

- new와 delete 연산자
동적 메모리 할당, 해제를 위한 new, delete 연산자를 도입한다.

- 연산자 재정의 ( operator overloading )
기존의 연산자에 새로운 연산을 정의할수 있게 한다.

- 제네릭 함수와 클래스 ( generics )
함수나 클래스를 데이터 타입에 의존하지 않고 일반화시킬 수 있게한다.

  • C++의 객체 지향 특성



1. 객체와 캡슐화 (Encapsulation)
캡슐화는 데이터를 캡슐로 싸서 외부의 접근으로부터 데이터를 보호하는 객체 지향 특성이다. C++에서 캡슐의 역활을 하는 것이 클래스이며 class 키워드를 이용하여 작성한다. 클래스는 객체를 정의하는 틀이며, 객체는 클래스라는 틀에서 생겨난 실체(instance)이다. C++클래스는 멤버 변수들과 멤버 함수들로 이루어지며, 멤버들은 캡슐 외부에 공개하거나(public) , 보이지 않게(private) 선언할 수 있다.


2. 상속성 (inheritance)
객체 지향 언어에서 상속이란, 자식이 부모로부터 유산을 물려받는 개념이라기보다는, 자식이 부모의 유전자를 물려받는 것과 유사하다. C++에서 상속은 객체를 정의하는 클래스 사이에 상속 관계를 두어, 자식 클래스의 객체가 생성될 때 자식 클래스에 선언된 멤버뿐 아니라 부모 클래스에 선언된 멤버들도 함께 가지고 탄생하게 한다. 상속은 구현된 코드의 재사용성을 높여서 소프트웨어 생산성을 높인다.


3. 다형성 (Polymorphism)
다형성은 하나의 기능이 경우에 따라 서로 다르게 보이거나 다르게 작동하는 현상을 일컫는다.

반응형

'IT' 카테고리의 다른 글

NFT (Non-Fungible Token)란? NFT의 장점과 단점  (0) 2022.03.24
블록체인(Block Chain)이란?  (0) 2022.03.23
메타버스 (Metaverse)란 ?  (0) 2022.03.13
프로세스(process)란?  (0) 2022.01.30
인터페이스(Interface) 란?  (0) 2022.01.30