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++을 배우거나 까먹은 개념만 참고하고 싶다면 소년코딩을 추천한다.
'용어정리' 카테고리의 다른 글
머신러닝 용어 정리 (2) | 2024.02.25 |
---|---|
추천 관련 용어 정리 (0) | 2024.02.18 |
딥러닝 용어 정리 및 책 추천 (0) | 2020.12.30 |