C++ 개념 정리

1. 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)

CE : 하랑 2025. 12. 30. 15:35

 

- 개념

프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

- 객체지향의 4가지 특징

(1) 캡슐화

객체가 모든것을 외부에 공개할 필요는 없는 정보 은닉 개념

  • private
  • protected
  • public

 

(2) 추상화

만들고 싶은 것에 대한 개념을 클래스로 표현한 것입니다.

 

 

(3) 다형성

같은 이름을 사용하여 다른 기능을 구현하는 것을 의미한다.

ex) 대표적인 예시 - 오버로딩, 오버라이드

 

추가 정리


 

1. 오버로딩

한 클래스 안에 함수를 중복 정의하는 것을 의미한다. 이름은 같지만 인자의 개수나 타입이 다른 경우

 

동일한 기능의 함수를 정의할 때 다양한 입력값을 받기 위해서 사용한다.

.h

void SetValue(int32 iInValue);
void SetValue(float fInValue);

 


 

2. 오버라이드

부모 클래스의 함수를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임

 

동작 방식 이해

(1) 함수 포인터란?

함수도 다른 변수들 처럼 주소를 가지고 있는데 이 함수의 주소를 포인터 변수에 저장해서 사용하는 걸 함수 포인터라고 합니다.

 

callback이란?

함수가 함수를 부른다는 뜻입니다.

 

 

(2) 가상 함수 테이블

컴파일러가 가상함수 개수 만큼의 함수포인터 배열을 만듭니다. 가상함수 테이블이란 함수 포인터 배열의 첫번째 주소 입니다.

 

- 가상함수 테이블 만들어지는 순간

생성하는 조건은 클래스 내부에 최소 하나의 가상함수(virtual)가 정의 되어 있는 경우

 

- 가상함수 완성되는 순간

자식 생성자까지 다 호출 됐을 때가 최종

 


 

(4) 상속

자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것 

 

클래스의 재사용이 용이하도록 해준다. ex) 공통적 요소

 

다중 상속 (Interface 상속해서 사용하는 경우)

class AActor : public UTickObject, public UWorldObject, public UNameObject

// UNameObject(이름)가 UTickObject의 기능을 가질 이유가 없는 경우 두개의 기능으로 분리후 다중 상속 

 


 

Has A, Is A 관계

Is A : ~이다. 상속.
Has A : 가졌다.

Player 클래스가 FightUnit 클래스를 상속 받았으므로 Player Is A FightUnit,
멤버변수로 다른 클래스를 가지면 Player Has A Sword 라고 표현한다.

 

class Item {
public:
	int cost;
};
class Sword : public Item {

};
class FightUnit {

};
class Player : public FightUnit {
private:
	Sword Weapon;
};

 


 

객체지향과 절차지향의 차이점

절차지향은 순차적으로 실행에 초점이 되어 있고 객체지향은 객체간의 관계/조직에 초점을 두고 있습니다. 이렇게 설명하면 객체지향은 절차적으로 실행되지 않냐? 라는 의문이 드는데 객체지향 역시 절차지향과 동일한 순서로 실행됩니다.

  • 절차지향은 데이터 중심, 객체지향은 기능 중심
  • 절차지향의 반대는 객체지향이 아니고 객체지향의 반대는 절차지향이 아님

'C++ 개념 정리' 카테고리의 다른 글

6. 생성자, 소멸자  (0) 2026.01.03
5. 연산자  (0) 2026.01.03
4. 메모리  (0) 2026.01.01
3. C++ template  (0) 2025.12.30
2. 추상 클래스  (0) 2025.12.30