SW/C++

C++와 객체 지향에 대해 알아볼까요?

얇은생각 2018. 11. 19. 17:53
반응형

C++는 고성능의 세련된 문법을 보유하고 있습니다. 또 라이브러리를 제공하는 훌륭한 객체지향 언어입니다. 90년대 초반 부터 마이크로소프트와 인텔 등의 기업들과 gcc를 앞세웠습니다. 그 결과 오픈 소스 진영에서 하드웨어와 운영체제에 최적화된 컴파일러를 앞다투어 지원해왔습니다. 특히 C++11 버전에는 다양한 기능을 추가했습니다. 뿐만 아니라 개발자 편의를 제공하는 스펙들을 포함하였습니다. Boost와 같은 라이브러리를 함께 사용하면 코드를 더욱 명료하게 작성할 수 있습니다.

 

C++ 등장배경과 표준

C는 1972년 벨 연구소의 유닉스 운영체제 개발자인 데니스 리치가 고안하였습니다. 운영체제를 개발할 때 하드웨어 제어를 위해 어셈블리어를 사용하였습니다. 유지보수가 어렵고 하드웨어 의존성이 컸습니다. 대안을 찾기 위해 개발한 것입니다. 당시 하드웨어 성능은 열악하였습니다. 최소의 코드로 최대의 기능을 구현해야 해서 C언어를 고안하기에 이른 것입니다. 

80년대에 들어서면서 하드웨어는 급격하게 발전하였습니다. 하지만 소프트웨어의 발전은 하드웨어 발전 속도를 따라가지 못했습니다. 그 이유는 하드웨어 성능과 기능에 비례해 소프트웨어 복잡도 커졌기 때문입니다. 그러나 기존의 절차지향 또는 함수 기반 코드들로는 한계가 있었습니다. 이러한 위기를 극복하기 위해 새로운 방식의 언어인 C++가 등장하게 되었습니다. 

C++는 1983년 벨 연구소의 비얀 스트로스트룹이 C 문법은 거의 유지하면서 객체지향 문법의 가상함수, 연산자 오버로딩 개념을 접목한 프로그래밍 언어입니다. C++이라는 명칭에서 ++의 의미는 기존 C에서 한 단계 더 진보했다는 의미이다. 90년대부터는 본격적으로 사랑 받기 시작하였습니다.

 

C++11의 주요 특징

멀티태스킹, 제너럴 프로그래밍, 초기화 방법 등에 관한 주요 문법을 확장하였습니다. 런타임 성능 향상, 컴파일 성능 향상, 편의성 향상, 완전히 새로운 기능 등 네가지 항목으로 나누어지고 있습니다. 특히, 런타임 성능 향상은 멀티태스킹 메모리 모델, 가변 인자 등의 문법을 제공해 메모리와 계산 속도 최적화에 초점을 맞추었습니다. 기존에 정의한 라이브러리들을 모두 표준으로 포함하여 std:trl 네임스페이스 라이브러리들을 모두 std에 포함했습니다.

 

객체지향 개념 이해

객체 지향 개념은 60년대부터 본격적으로 다뤄져 왔습니다. 사실상 C++와 함께 해왔습니다. C++를 자유자재로 활용하려면 객체 지향의 개념을 제대로 이해해야 합니다. C를 이해하는 개발자는 절차형 프로그래밍 방식에 익숙합니다. 절차형 프로그래밍은 설계도에 해당하는 순서도가 있고 순서도에 따라 작성한 코드가 순서에 맞게 실행됩니다. 반면 객체 지향 프로그래밍은 순서보다는 우리가 사는 실세계를 모델링한 Abstract Data Type라는 일종의 설계서를 작성하고 구현합니다.

 

객체지향 모델링 

객체란, 실세계에서 정의할 수 있는 모든 형태이며 속성과 기능을 포함합니다. 속성이란 객체가 가진 상태 또는 특성을 의미합니다. 기능이란 객체가 할 수 있는 행동을 의미합니다. 객체와 속성 기능을 도출하는 과정은 일종의 모델링이고 추상화를 통한 설계 단계로, ADT라 부릅니다. 이 과정이 완료되면 C++의 헤더파일이 산추물로 나옵니다 일반적으로 ADT를 먼저 작성하면 장점이 있습니다. 상위수준의 명세서이므로 코드를 이해하기 쉽게 합니다. 또 구현 전에 충분히 검증할 수 있고 쉽게 변경할 수 있습니다. 추상적인 기술이므로 다른 프로젝트에 재사용할 수 있습니다.

반응형