본문 바로가기

Programming/C++

C++에 대해 알아보자

반응형

C++의 역사와 객체 지향 프로그래밍에 대해 알아보자

C++은 두 가지 분리된 프로그래밍 방식을 결합하고 있는데, C로 대표되는 절차언어 방식과 C++로 대표되는 객체 지향 언어방식입니다.

따라서, C++을 공부하는 데 있어서 가장 기본적인 사항은 C언어에 대해 알아야 합니다.

그리고, C++의 특징인 객체 지향 언어(Object-Oriented Language)에 대해 알아야 합니다.

이번에는 C언어와 C++이 만들어지게 된 과정에 대해 알아보겠습니다.

 

 

 

 

1. C와 C++ 역사

  ① C언어 역사

      1970년대 초반 벨(Bell) 연구소의 Dennis Richie는 UNIX라는 운영 체제를 개발하는 프로젝트를 맡고 있었습니다. 

Richie는 이 프로젝트를 위해 간결하고 작은 실행 코드와 빠른 속도의 프로그램을 생성하며 하드웨어를 효율적으로 제어할 수 있는 언어가 필요하였습니다.

하지만, 그 당시엔 이런 특징을 만족시켜줄 언어는 컴퓨터 기계어에 가까운 어셈블리어 밖에 없었습니다.

또한, 어셈블리어는 저수준 언어이기 때문에 특정 컴퓨터 프로세서에만 국한해서 사용할 수밖에 없었습니다.

이런 특성때문에 프로그램을 다른 종류의 컴퓨터에 사용하려면 그 프로세서에 맞는 어셈블리어를 사용하여 새로 작성해야만 했습니다.

하지만, UNIX는 같은 프로그램을 여러 종류의 컴퓨터에서 똑같이 작동하도록 프로그래밍하려는 목적이었으므로 고수준 언어인 컴파일러(Compiler)라는 프로그램 사용을 고려하고 있었습니다.

그렇지만 고수준 언어로 작성된 프로그램은 특정 컴퓨터의 내부 언어로 번역하여 주는 방식으로 사용되는데, Richie는 저수준 언어의 효율성과 하드웨어 접근 능력을 고수준 언어의 일반성과 이식성을 지닌 새로운 언어를 원했고 그에 맞는 언어인 C언어를 만들게 되었습니다.

 

  ② C++ 역사

      C언어와 마찬가지로 C++도 벨 연구소의 Bjarne Stroustrup에 의해 1980년대 초반 만들어졌습니다.

초기에는 C with Classes라는 이름으로 개발되었으며, C언어의 기능에 객체 지향 프로그래밍 개념을 추가한 언어였습니다.

그는 C++의 주된 목적은 보다 쉽고 쾌적한 프로그래밍 환경을 만들기 위한 것이라고 밝혔습니다.

C++은 C를 기초로 만들어졌는데, 이로 인해 C언어의 장점인 간결성을 지니고 있으며 여기에 OOP(Objected-Oriented Programming)의 특징을 결합하여 만들었습니다.

C++은 C언어를 기초로 만들어져서 C언어 라이브러리를 사용할 수도 있습니다.

여기서, 라이브러리는 프로그램에서 불러들여 사용할 수 있는 프로그래밍 모듈의 집합을 의미합니다.

 

1983년 Bjarne Stroustrup은 C with Classes를 개발하면서 객체 지향 프로그래밍 개념을 결합한 C++을 개발하기 시작했으며, 초기에는 클래스, 상속, 가상함수 등 도입하였고 점차 발전하면서 STL(Standard Template Library), 예외 처리(Exception Handling), 템플릿(Template) 등의 기능이 추가되었습니다.

 

현재도 널리 사용되는 C++은 사용 분야가 게임, 시스템, 임베디드 시스템, 과학 기술 계산, 인공지능 등 폭넓게 사용되고 있으며, 다른 프로그래밍과의 연동성이 뛰어나 C++로 개발된 라이브러리를 다른 언어에서도 사용하는 것이 가능합니다.

 

 

 

 

2. 객체 지향 프로그래밍

   객체 지향 프로그래밍은 소프트웨어 개발 패러다임 중 하나입니다. 이 패러다임은 프로그램을 작성할 때 데이터와 데이터를 처리하는 함수(메서드)를 하나의 단위인 객체(Object)로 묶어 설계하는 것을 기반으로 합니다.

알고리즘을 강조했던 OOP는 자료에 주안점을 둡니다. 객체 지향 프로그래밍은 문제 해결을 절차적인 접근 방법이 아니라 언어를 문제 해결 방식에 맞춘 것입니다. 즉, 자료의 형태를 해결해야 할 문제의 본질적인 특징에 대응할 수 있도록 설계하는 것입니다.

 

객체 지향 프로그래밍에서는 실제 세계의 객체를 모델링하여 프로그램을 작성합니다.

객체는 다른 객체와 상호작용하며 객체 자신이 필요로 하는 데이터와 메서드를 지니고 있습니다.

객체는 다른 객체와 상호작용하는 데 필요한 인터페이스를 제공하며, 이러한 인터페이스는 객체의 내부 구현을 감춥니다. 이를 캡슐화(Encapsulation)라고 합니다.

 

객체 지향 프로그래밍에서 핵심 개념은 클래스(Class)입니다. 클래스는 객체를 생성하기 위한 틀이며, 클래스를 기반으로 인스턴스(Instance)를 생성해야 합니다. 이 인스턴스는 클래스에서 정의된 데이터와 메서드를 가지고 있습니다.

C++에서 클래스가 바로 새로운 자료 형태를 나타내는 것이고, 객체는 그런 계획에 따라 생성된 특별한 자료구조입니다.

일반적으로 클래스는 특정 객체를 나타내는데, 어떤 자료를 쓸 것인지, 그리고 그 자료를 가지고 수행할 수 있는 동작을 정의합니다.

프로그램을 설계하는 데 있어 첫번째 OOP 접근 방법은 프로그램이 다루려고 하는 대상을 정확하게 나타내는 클래스를 설계하는 것입니다.

 

객체 지향 프로그래밍을 하게 되면 작성한 코드의 재사용성을 높이고 사용 및 변경이 용이하고, 대규모 프로그램을 작성할 때 더욱 그 진가를 발휘하게 됩니다. 또한, 객체 지향 프로그래밍에서는 추상화(Abstraction), 상속(Inheritance), 다형성(Polymophism) 등의 개념을 이용하여 프로그램을 작성할 수 있습니다.

이처럼 정확하게 설계된 클래스를 이용하면 프로그램을 작성할 때 원하는 대상의 클래스를 재사용함으로 간단하게 프로그래밍할 수 있게 되며, 대용량의 프로그램을 작성할 때도 객체를 재사용하므로 기존의 프로그래밍의 크기를 줄일 수 있는 장점이 있습니다.

 

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다

 

 

반응형