본문 바로가기
ProgramingLagnuage/C++

[C++] C++ 소개

by TSpoons 2024. 9. 22.

C++ 특징

 

절차적 프로그래밍(Procedural programming)

- 적절한 데이터 구조 설계의 초점이 맞춰짐

- C와 다르게 다른 언어에서도 C++를 통해 이 절차적 프로그래밍을 지원해줌

데이터 추상화(Data abstraction)

- 클래스를 통해 구체적이고, 추상적인 데이터들을 관리

- 클래스 내부에 데이터와 그 데이터를 처리하는 함수(메서드)를 포함시켜 데이터의 구조와 동작 캡슐화.

- 인터페이스를 통해 사용자는 내부 구현 세부 사항에 의존하지 않고 클래스의 기능을 활용 가능

객체 지향 프로그래밍(Object-oriented programming)

- 클래스, 상속, 다형성, 캡슐화와 같은 OOP 개념을 통해 유지보수성과 재사용성을 높임.

- 설계 단계에서 객체 간의 관계를 정의하고, 코드에서 이러한 관계를 구현하는 것이 주된 목표.

일반 프로그래밍(Generic Programming)

- 템플릿을 활용해 데이터 타입에 독립적인 함수나 클래스를 설계, 구현, 사용 가능

- 템플릿 클래스와 함수는 성능을 향상시키면서도 클래스의 유연성과 효율성을 높이는 역할을 함.

 

 


C++ 프로그래머를 위한 10가지 제안(The C++ Programming Language에서 발췌)

 

- 이 말들을 스터디 진행 후에는 이해할 수 있겠지?

  1. C++를 단순히 C의 확장으로 사용하지 말 것
    - C++는 다양한 디자인과 구현 스타일을 지원하며, C 스타일의 코드를 그대로 사용하면 유지보수성과 성능이 떨어질 수 있습니다.
  2. C를 C++로 쓰지 말 것
    -
    C 스타일의 코드 작성 방식은 C++에서 최적의 성능을 제공하지 않으며, 가독성 및 유지보수 측면에서도 비효율적입니다.
  3. C++ 표준 라이브러리 활용
    -
    C 표준 라이브러리 함수 대신 C++의 기능을 사용해야 합니다. 예를 들어, strcpy() 대신 = 연산자를, strcmp() 대신 == 연산자를 사용하는 것이 더 효율적입니다.
  4. 매크로 사용 최소화
    -
    C++에서는 매크로 대신 const, constexpr, 열거형(enum), 인라인 함수, 템플릿, 네임스페이스 등을 사용하여 매크로의 문제를 해결할 수 있습니다.
  5. 변수 선언과 초기화를 지연
    - 변수를 필요할 때 선언하고 즉시 초기화합니다. 선언문은 필요한 곳에서만 발생시키고, 조건문에서도 변수를 초기화할 수 있도록 설계합니다.
  6. malloc() 대신 new와 벡터 사용
    - malloc()을 사용하지 말고 C++에서 제공하는 new 연산자와 delete 연산자를 사용합니다. 더 나아가, 동적 메모리 관리를 위해 STL의 벡터를 사용하는 것이 좋습니다.
  7. 포인터, 유니온, 캐스트 최소화
    - 포인터, 유니온, 캐스트는 C++에서 거의 필요하지 않으며, 가능한 한 C++의 강력한 타입 시스템을 사용해야 합니다. 명시적 캐스트가 필요할 때는 static_cast, dynamic_cast와 같은 C++ 스타일 캐스트를 사용합니다.
  8. 배열 및 C 스타일 문자열 대신 C++ 표준 라이브러리 사용
    - C 스타일의 배열과 문자열 대신 C++의 std::string, std::array, std::vector를 사용하여 더 간결하고 유지보수하기 쉬운 코드를 작성합니다.
  9. 포인터 산술 피하기
    - 특별한 경우가 아니라면 포인터 산술을 피해야 합니다. 특히 단순 배열 탐색의 경우에는 포인터를 직접 사용하지 말고 반복자나 STL 컨테이너를 활용하는 것이 좋습니다.
  10. C 스타일 코드가 항상 효율적이라고 가정하지 말 것
    - C 스타일 코드를 피하는 것이 일반적으로 더 효율적입니다. C++의 클래스, 템플릿, 예외 처리와 같은 고급 기능을 사용하면 더 간결하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.

 

 


 

C++ 기본

 

- C++은 기본적으로 컴파일된 언어여서 프로그램을 실행하려면 작성한 코드를 compile한 후,  링커를 통해 생성된 object file들을 결합하여 실행 파일을 생성합니다.

- 실행파일은 특정 하드웨어와 OS(운영 체제)에 맞추어 제작되어, 한 시스템에서 만든 실행 파일은 다른 시스템에서 사용할 수 없다.

- 하지만, 동일한 C++ 소스 코드를 여러 시스템에서 컴파일하고 실행할 수 있어서 소스 코드가 다양한 플랫폼에서 성공적으로 컴파일되고 실행될 수 있다.

 

ISO C++ 표준

ISO C++ 표준은 크게 두 가지 엔티티로 구성됩니다:

  1. 핵심 언어 기능: 기본 타입(예: char, int), 제어문(예: for문, while문) 등과 같은 C++ 언어 자체의 기능을 의미합니다.
  2. 표준 라이브러리 구성 요소: 컨테이너(예: vector, map), 입출력 연산(예: <<, getline()) 등으로, 이들은 모든 C++ 구현에서 제공하는 표준 라이브러리의 일부입니다.

C++의 정적 타입 시스템

C++는 정적 타입 언어입니다. 즉, 객체, 값, 이름, 표현식과 같은 모든 엔티티의 타입은 컴파일 시점에서 명확히 결정되어야 합니다. 객체의 타입은 그 객체에 적용할 수 있는 연산의 집합을 결정합니다. 이러한 정적 타입 시스템 덕분에 C++는 오류를 컴파일 시점에서 미리 검출할 수 있으며, 더 안전하고 효율적인 코드를 작성할 수 있습니다..!