본문 바로가기

C++ 용어 정리 및 사이트 추천

1년 만에 C++ 프로그래밍을 하면서 까먹었던 개념들을 다시 정리해보았다. 각 용어의 출처는 하이퍼링크를 통해 확인할 수 있고 가장 도움을 많이 받은 곳은 끝나지 않는 프로그래밍 일기소년코딩이다. 참고로 예시는 회색, Tip은 파란색으로 표시했다.

 

C++ 용어 정리


iostream

Input/Output stream

namespace

이름 충돌 문제를 해결하기 위해 도입된 개념으로,

모든 식별자(변수, 함수, 형식 등의 이름)가 고유하도록 보장하는 코드 영역

:: 연산자

범위 지정 연산자로,

어떤 namespace를 가리킬 때 사용하는 연산자

 using

-         using 선언문 using namespace std::cout;

-         using 지시문 using namespace std;

 std

cin, cout, endl과 같은 C++ 표준(standard) 라이브러리의 모든 기능이 담겨있는 namespace 이름

 endl

end line

 함수 오버로딩(Function overloading)

함수명은 같으며 인자의 자료형이나 수가 다른 함수의 선언을 허용하는 것

void func(int a)

{cout << "void func(int a)이 호출됨!" << endl;}

void func(int a, int b)

{cout << "void func(int a, int b)이 호출됨!" << endl;}

변수 초기화(Variable initialization) 또는 초기화(Initialization)

-         복사 초기화(copy initialization): 대입 연산자 = 사용

-         직접 초기화(direct initialization): 괄호 () 사용

-         유니폼 초기화(uniform initialization): 중괄호 {} 사용

Tip) 복사 < 직접 < 유니폼을 사용하는 것이 좋다.

 기본 타입(Data type)

-         정수형 타입: (signed) short, unsigned short, (signed) int, unsigned int, (signed) long, unsigned long, unsigned long long

-         실수형 타입: float, double, long double

-         문자형 타입: (signed) char, unsigned char

-         Bool형 타입: true, false

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

현실 세계에 존재하는 실체 및 개념을 객체라는 독립된 단위로 구성하고,

이렇게 구성된 객체를 조립하여 프로그램을 완성해 나가는 방식

자동차를 예로 들면 자동차의 속도 등이 상태이고, 속도를 올리거나 내리거나 브레이크를 밟는 등의 동작은 행동이 됨

 클래스(Class)

클래스는 멤버 변수와 멤버 함수로 이루어짐

-         부모 클래스, 상위 클래스, 기초 클래스(base class), 슈퍼 클래스(super class)

-         자식 클래스, 하위 클래스, 유도 클래스(derived class), 서브 클래스(sub class)

붕어빵을 찍어낼 틀

 객체(Object, Instance)

우리가 주변에서 쉽게 볼 수 있는 것들

객체는 상태와 행동으로 이루어짐

붕어빵

 cout(console out)

C++의 출력 함수

 cin(console input)

C++의 입력 함수

 new 연산자

객체를 동적 할당하고 싶을 때 사용

int* studentScore;

studentScore = new int; 또는 studentScore = new int[studentNum];

 delete 연산자

new 연산자로 할당된 객체의 메모리를 해제할 때 사용

delete studentScore; 또는 delete []studentScore;

 구조체(Struct)

하나 이상의 변수를 그룹 지어서 새로운 자료형을 정의하는 것

 접근 제어 지시자

멤버의 접근에 제한을 두는 지시자

-         private: 외부에서 접근 불가능

-         protected: 외부에서 접근이 불가능하나, 상속된 파생 클래스에서는 접근 허용

-         public: 어디서든 접근 가능

 생성자(Constructor)

객체 생성 시 호출되는 함수

-         생성자 정의 시 생성자의 이름이 클래스의 이름과 같음

-         생성자도 함수와 같이 매개변수를 가질 수 있음

-         반환형이 없음

 참조자(Reference)

변수에 또 하나의 별명을 붙여주는 것

-         참조자 선언 시 반드시 초기화해야 함

-         한번 초기화하고 나서는 다른 변수를 참조할 수 X

int a=50;

int &aa=a;

& 연산자

-         변수 앞에 & 연산자: 주소 변환 연산자

-         변수 선언 앞에 & 연산자: 참조자

 값에 의한 호출(Call by value)

함수에 인자를 넘길 때 “값”만 넘김

따라서 함수 내에 인자 값 변경 시, 호출자에 영향을 주지 않음

 참조에 의한 호출(Call by reference)

한수에 인자를 넘길 때 메모리 “주소”를 넘김

따라서 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨.

 복사 생성자(Copy constructor)

MyClass mc1(50, 40);

MyClass mc2 = mc1;

 소멸자(Destructor)

객체 소멸 시 호출되는 함수

-         생성자와 달리 클래스 이름 앞에 ~가 붙은 형태

-         매개변수를 가질 수 없음

-         반환형이 없음

얕은 복사(Shallow copy)

주소가 복사되어 객체를 공유한다. (같은 객체)

깊은 복사(Deep copy)

값만 복사하여 객체를 공유하지 않는다. (다른 객체)

 인라인(inline)

함수 호출을 함수 자체의 내용 복사본으로 대체하는 것

Tip) 함수를 인라인화 하는 것은 내부 루프가 없는 짧은 함수에 가장 적합

But 최신 컴파일러는 자동으로 필요한 함수를 인라인화 하므로 inline 키워드를 사용할 필요 X

 프렌드(Friend)

A 클래스 내에서 B 클래스를 친구로 지정하면, B 클래스는 A 클래스의 private 멤버에 직접 접근 가능

Tip) friend 선언은 객체지향의 핵심 중 하나인 ‘정보 은닉’을 깨는 행위로, 특별한 경우가 아니고서는 사용을 자제할 것!

 상속(Inheritance)

클래스를 상속받으면 따로 정의, 선언할 필요 없이 상위 클래스 내의 속성과 행동들을 물려받아 쓰게 됨

사람 클래스(상위 클래스), 학생 클래스(하위 클래스)

 초기화 리스트(initialize list)

클래스의 각 멤버를 생성자에서 초기화할 때 생성자 뒤에 콜론 연산자(:)를 사용해서 객체의 멤버를 초기화하는 것

class Point
{
      int x;
      int y;
public:
      Point(int a, int b) : x(a), y(b)
      {
      }

};

 private, protected, public 상속

private 상속: private 제한자보다 접근 범위가 넓은 멤버는 모두 private 제한자로 바꾸어 상속

protected 상속: protected 제한자보다 접근 범위가 넓은 멤버는 모두 protected 제한자로 바꾸어 상속

public 상속: public 제한자보다 접근 범위가 넓은 멤버는 모두 public 제한자로 바꾸어 상속

Tip) 이 셋의 접근 범위는 private < protected < public

 객체 배열(Object array)

객체가 배열인 것

Student student[3];

 객체 포인터 배열(Object pointer array)

객체가 배열인데 배열 하나하나가 객체의 주소 값인 것

Student * student[3];

 this 포인터

객체 자신을 가리키는 포인터

this->num1 = num1;

상속 오버라이딩(Inheritance overriding)

상속받은 메서드 이름은 그대로 사용하되 그 안의 내용을 다시 정의하는 것

오버라이딩(Overriding)

재정의

 #pragma once

비주얼 스튜디오에서 제공하는 간편한 전처리기로서,

어떠한 코드나 헤더 파일이 다른 코드나 헤더에서 include될 때 중복되어 복사되는 것을 방지하는 기능

goto 문

CPU가 코드의 다른 지점으로 점프하도록 하는 제어 흐름 명령문

점프하는 지점은 문 라벨(statement label) : 을 사용하여 식별됨

int main()

{

double x;

tryAgain: // this is a statement label

std::cout << "Enter a non-negative number";

std::cin >> x;

 

if (x < 0.0)

goto tryAgain; // this is the goto statement

std::cout << "The sqrt of " << x << " is " << sqrt(x) << std::endl;

return 0;

}

Tip) 일반적으로 goto문을 사용하지 않는 것이 좋음

프로그래머가 실행 지점을 임의로 뛰어넘을 수 있게 하는 이 기능은 스파게티 코드를 만들기 때문!

 

C++ 용어 사이트 추천


 

'프로그래밍 관련/C/C++' 카테고리의 글 목록

아무리 어려운 내용이라도 쉽게 설명할 수 있을 때 비로소 아는 것이라 굳게 믿고 있습니다. 강좌라기 보다는 배운 내용을 기록하는 글들 위주로 올라오게 될 것 같습니다. (이메일: layer6ai@gmail.c

blog.hexabrain.net

끝나지 않는 프로그래밍 일기의 경우 C++ 강좌가 총 17편으로 구성되어 있다. 글이 길지 않아 C++ 복습하기 좋았다. 특히 C언어와 비교하여 설명해주셔서 C언어를 아는 사람에게 추천한다. 글을 읽으면서 생기는 궁금증들을 바로 다음에서 설명해주셔서 매우 흐름 있게 이해하기 좋았다. 단점이라면 2012년 글이라는 것? C++은 역사가 오래된 언어라 크게 다를 건 없지만 최신 업데이트가 반영되지 않았다는 것이 아쉬웠다 T^T 

 

 

'C++ 이야기' 카테고리의 글 목록

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

boycoding.tistory.com

소년코딩은 2018년인 비교적 최근에 작성되었다. 최신 업데이트 사항이 대부분 반영이 되어 있고 용어 설명이 잘 되어 있다. C ++ 글이 많아 다 읽지는 못했지만 용어별로 글이 잘 작성되어 있어 용어를 모를 때 바로바로 참고하기 좋았다! 

 

개인적으로 빠르게 C++을 복습하고 싶다면 끝나지 않는 프로그래밍 일기를, 아예 처음부터 C++을 배우거나 까먹은 개념만 참고하고 싶다면 소년코딩을 추천한다.

 

'용어정리' 카테고리의 다른 글

머신러닝 용어 정리  (1) 2024.02.25
추천 관련 용어 정리  (0) 2024.02.18
딥러닝 용어 정리 및 책 추천  (0) 2020.12.30