본문 바로가기
Language/C++

C++ 이론편

by 아무키 2022. 5. 22.
반응형

일반적으로 c 언어를 기준으로 저급언어 고급언어를 나눈다.

프로그램(Program)이란 우리가 하고자 하는 작업을 컴퓨터에게 전달하여 주는 역할을 하는것이다.

프로그램은 컴퓨터에게 무엇을 어떻게 시킬지를 기록해 놓은 작업 지시서라고 보면 된다.

프로그램 안에는 "A를 B의 방식으로 해결하라" 와 같은 형태의 명령어(instruction)들이 들어 있다.

 

사람이 사용하는 언어(자연어)를 사용하면 컴퓨터는 이해할 수 없다. 컴퓨터가 이해 할 수 있는 언어(기계어)로 명령을 내려야 한다.

 

사실 컴퓨터가 알아듣는 언어는 한가지이다. 즉 0과 1로 구성되어 있는 "0011.... " 과 같은 형태의 기계어(Machine language)이다. 컴퓨터는 이러한 이진수 형태를 바로 이해 할 수 있다. 실제로 초기의 컴퓨터에서 이러한 기계어를 사용하여 프로그램을 작성했다.

 

프로그래밍 언어가 생긴 이유 -> 전쟁

 

컴파일러란

 

   - 인간이 기계어로 프로그램을 할 수 있다면 아무런 문제가 없지만 인간의 언어와는 너무 다르다.

   - 기계어는 인간에게는 상당히 불편한 언어 이었기 떄문에 사람이 이해하기 쉬운 프로그래밍 언어가 만들어지게된다. 프로그래밍 언어는 기계어와 인간이 사용하는 자연어 중간 쯤에 위치한다. 인간이 프로그래밍 언어로 프로그램을 작성하면 컴파일러라는 소프트웨어가 프로그램을 기계어로 바꾸어 준다. 이렇게 번역하는 작업을 컴파일(compile)이라고 하고 이러한 작업을 하는 소프트웨어를 컴파일러(compiler)라고 한다.

 

 

C++ 언어

 

   - C++ 이름이 의미하는 것처름 C언어에 객체 지향프로그래밍 기능을 추가하여 만든 언어이다. C 언어처럼 절차 지향 프로그래밍(Procedural programming)을 할 수 있다. 여기에 복잡한 프로그램을 작성하는데 매우 효과적인 방법으로 알려진 객체 지향 프로그래밍(Object-oriented programming) 방법을 사용 할 수 있다. 또한 템플릿을 이용하는 일반화 프로그래밍(Generic programming)기능까지 추가되었다.

 

 

1) C++의 역사

   - C++은 1980년대 초에 AT&T 벨 연구소의 Bjarne Stroustrup에 의하여 개발되었다. C++는 이름에 ++(증가 연산자)가 들어 있는 거처럼 C언어를 유지하면서 확장한 것이다.

   - Stroustrup은 1979년부터 C언어에 클래스 개념을 추가한 "C with classes" 언어를 개발하기 시작하였다. 대규모의 소프트웨어를 개발할 때 Simula라는 언어의 객체 지향 개념이 매우 유용함을 알게 되었지만 Simula는 속도가 매우 느렸고 반면에 C 언어는 상당히 빠르지만 객체 지향의 개념이 없었다. C++는 C언어에 클래스 개념을 추가하고 이어서 가상함수, 연산자 중복 정의, 다중상속, 템플릿, 예외 처리등 기능이 차례로 추가되었다.

 

94년도 Java 단일상속과 달리 다중상속으로 인해 문제점이 많았다.

 

   - C++에 대한 표준은 ANSI(American National Standards Institute)와 ISO(International Standard Organization)에 의하여 공동으로 개발되었다. 1993년 3월에 워킹 드래프트를 발표, 1997년에 공식적인 표쥰으로 지정되었다. 2011년도에는 C++ 11이 발표되었다. C++ 11에는 많은 새로운 특징들이 추가되었으며 2014년도에는 C++ 14가 ISO에 의하여 최신 표준으로 지정되었다. C++ 14에는 C++ 11에 새로운 특징을 추가하였으며 표쥰라이브러리도 확장되었다. 그리고 지속적으로 C++17, C++20까지 발전에 이르고 있다.

 

C++ 98 : Templates, STL, String, I/O StreamC++ 11 : Move, Untitled Initialization, Lambda, constexpr, Multithread, Memory Model, Smart Pointer, Regular Expression, Hash Table, std::arrayC++ 14 : Reader - Writer Lock, Generic LambdaC++ 17 : Fold expression, constexpr if, Structured Binding, Parallel Algorithm, Filesystem, std::any, std::optional, std::variantC++ 20 : Concept, Module, Range, Coroutine
2) c언어에 추가된 기능
   - C++ 언어의 가장 큰 특징은 C 언어의 거의 모든 것을 지원하면서 객체 지향을 추가하였다는 점이다.

 

다음과 같은 기능들이 추가되었다.

   - 클래스(class) : 클래스를 이용하여 하나의 객체의 속성과 동작들을 한 곳으로 모아서 정의 할 수 있다.

   - 상속(Inheritance) : 클래스를 상속받아서 기존의 코드를 재 사용할 수 있다.

   - 다형성(Polymoriphism) : 동일한 함수의 객체가 종류에 따라서 다르게 동작하는 것이다.

   - 연산자중복(operator overloading) : 대상에 따라서 동일한 연산자로 새로운 연산을 정의할 수 있다.

   - 참조타입(reference type) : 변수의 별명을 만들어서 변수와 같이 사용할 수 있다.

   - 더욱 큰 표준 라이브러리 : C 언어와는 비교도 되지 않는 풍부한 표준 라이브러리를 제공한다.

   - 함수 중복(Function overloading) : 매개 변수만 다르면 동일한 이름의 함수를 여러 개 만들 수 있다.

   - new와 delete 연산자 : 동적 메모리 할당과 해제를 담당하는 연산자이다.

   - 제네릭(Generics) : 클래스 정의를 자료형에 상관없이 재사용하는 기술이다.

 

3) 최신 C++의 특징(Modern C++)

   - 최신 C++은 완전히 새로운 프로그래밍 스타일로 변경되었다. 특히 C++에 파이썬의 특징들이 많이 추가되었다. 파이썬에서 많은 인기를 얻고 있는 범위(Range) 기반의 반복루프, 타입 자동추론 기능, 보편적인 초기화, 람다식 등이 C++에 추가되었다.

   - C++는 세계에서 가장 널리 사용되는 프로그래밍 언어 중 하나이다. 잘 작성된 C++ 프로그램은 빠르고 효율적이다. C++ 언어는 재미있고 흥미진진한 게임부터 고성능 과학 소프트웨어, 장치 드라이버, 내장 프로그램및 윈도우 클라이언트 응용프로그램에 이르기까지 다양한 응용 프로그램을 만들 수 있으므로 다른 언어보다 유연하다. 20년 이상 동안 C++는 많은 문제를 해결하는데 사용되어 왔다.

   - C++의 원래 요구 사항 중 하나는 C언어와의 호환성이었다. 그 이후로 C++은 많은 후속 기능 향상을 통해 몇 차례 업그레이드 되었다. 이 유산으로 인해 C++은 종종 다중 패러다임 프로그래밍 언어라고도 불린다. C++에서는 원시 포인터, 배열, Null 종료 문자열, 사용자 지정 데이터 구조 등이 그대로 남아 있어 순전히 절차적인 C 스타일 프로그래밍을 수행할 수도 있다.

 

4) C++ 프로그래밍시에 주의해야 할 점

   - C++언어는 대부분의 C언어 문법을 포함하고 있다. 따라서 개발자가 C언어 스타일로 프로그래밍 하는 것도 얼마든지 가능하다. 하지만 객체 지향프로그래밍이나 일반화 프로그래밍은 단순히 C언어에 몇개만 추가하면 되는 것이 아니라 코딩의 패러다임 자체를 변경해야 한다. 즉 설계부터 새롭게 해서 프로그램을 작성해야 한다.

 

 

5) Java와 C#은 C++와 어떤 관계가 있을까?

   - Java는 Sun Microsystem에서 개발된 객체 지향 언어이고 C#은 Microsoft에서 개발되었다. C++은 Java와 C#의 부모에 해당하는 언어라고 할 수 있다. Java와 C#이 C++언어의 특징을 추가하거나 삭제하였지만 전반적인 문법이나 객체 모델은 거의 같다고 할 수 있다. 따라서 C++을 학습한 후에 Java나 C#을 학습하는 것은 비교적 쉽다.

   - Java나 C#은 다른 종류의 컴퓨터에서도 바로 실행되는 이식성 있는 프로그램을 작성하는데 유용하다. 이것은 Java나 C#은 가상 기계의 코드를 생성하기 떄문이다. 하지만 C++은 기계어 코드를 생성하기 때문에 다른 종류의 컴퓨터에서는 실행이 불가능하다. 하지만 C++은 빠른 속도로 실행이 가능하다는 장점이 있다. 따라서 이식성이 있는 소프트웨어를 원한다면 Java나 C#이 유리하지만 고성능의 소프트웨어를 목표로 한다면 C++가 최적이다.

 

 

C++은 어디에서 사용되는가

- Embedded Programing

- Realtime system

- Financial industry

- (3D) Game Programing

 

 

반응형

'Language > C++' 카테고리의 다른 글

05.포인터  (0) 2023.12.22
04.Function  (1) 2023.12.22
03.basic-syntax  (1) 2023.12.22
02. 변수와 상수  (1) 2023.12.22
01. C++ 프로그램의 구조  (0) 2023.12.21

댓글