게임프로그래밍/게임 프로그래머 입문 올인원

[게임 프로그래머 입문 올인원] 객체지향 개론, 상속성, 은닉성, 다향성

shine94 2025. 2. 7. 23:48

* 해당 글은 게임 프로그래머 입문 올인원 강의를 보고 정리한 글입니다.

   강의_바로가기

 

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

Rookiss | 어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로

www.inflearn.com

 

 

 

 

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

   프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라,

   프로그램을 수많은 객체(object)라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다

   ㄴ [객체] 메소드와 변수를 가지며 특정 역할을 수행하도록 인간이 정의한 추상적인 개념

 

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

객체 지향 프로그래밍

객체 지향 프로그래밍 (Object-Oriented Programming, OOP)은 프로그램 설계 방법론의 일

namu.wiki

 

* 클래스(Class)

   객체를 생성하기 위한 설계도

   멤버 함수(동작)와 멤버 변수(속성)를 포함

   정적할당과 동적 할당이 모두 가능

 

* 객체(Object)

   클래스 기반으로 생성된 실체

   설계도를 바탕으로 생성된 구체적인 데이터를 가진 단위

 

* 인스턴스(Instance)

   객체를 생성하는 행위 또는 생성된 객체를 인스턴스라고 부름

 

* 생성자(Constructor)

   객체를 생성할 때 호출되는 특별한 함수

   (1) 기본 생성자

       매개변수 없는 생성자

       사용자 정의 생성자가 하나라도 작성하면 기본 생성자는 자동으로 생성되지 않음

   (2) 사용자 정의 생성자

       개발자가 직접 정의한 생성자

 

* 복사 생성자(Copy Constructor)

   동일한 타입의 객체를 복사하여 동일한 상태를 갖는 새로운 객체를 생성

클래스명(const 클래스명& other)
{
	this->멤버변수1 = other.멤버변수1;
	this->멤버변수2 = other.멤버변수2;
	this->멤버변수3 = other.멤버변수3;
}

 

* 소멸자(Destructor)

   객체가 소멸될 때 호출되는 특별한 함수

   주로 동적으로 할당된 메모리나 리소스를 해제하기 위해 사용

 

* 생성자는 여러 개 만들 수 있으나, 소멸자는 하나만 만들 수 있다

 

* C++에서 일반적으로 멤버 함수를 위에, 멤버 변수를 아래에 배치한다

 

* 절차 지향 프로그래밍(Procedural Programming)

   함수, 메소드, 루틴, 서브 루틴 등(이를 통틀어 프로시저라고 함)을 이용한 프로그래밍 패러다임을 뜻한다

 

https://namu.wiki/w/%EC%A0%88%EC%B0%A8%EC%A0%81%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

절차적 프로그래밍

Procedural Programming 절차적 프로그래밍이란 단순히 순차적인 명령 수행이 아니라 함수, 메소드,

namu.wiki

 

* OOP 3대 요소

(1) 상속성(inheritance)

   기존에 존재하는 클래스의 속성이나 기능을 다른 클래스에 물려주는 것을 의미

   (예1) GameObject

            - Creature

            -- Player, Monster, Npc, Pet

            - Projectile

            -- Arrow, Fireball

            - Env

   (예2) Item

            - Weapon

            -- Sword, Bow, Lance

            - Armor

            -- Helmet, Boots, Armor, Glove

            - consumable

            -- Potion, Scroll

 

(2) 은닉성(data hiding), 캡슐화(encapsulation)

   변수나 메소드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념 중 하나이다

   (예) 알약

 

   - 접근 지정자

      public - 전부 접근

      protected - 내 자손들한테만

      private - 나만

 

   - 클래스에서 상속에서 사용하면

      private이면 부모가 public, protected 이어도 private

      protected이면 부모가 public 이어도 protected

 

https://inpa.tistory.com/entry/OOP-%EC%BA%A1%EC%8A%90%ED%99%94Encapsulation-%EC%A0%95%EB%B3%B4-%EC%9D%80%EB%8B%89%EC%9D%98-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4

 

💠 OOP 캡슐화 & 정보 은닉 개념 완벽 이해하기

캡슐화 (Encapsulation) 캡슐화란 쉽게 말하면 변수나 메소드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념중 하나이다. 우리가 먹는 알약을 생각해보면 된다. 알약의 실제 약 내용은 가루약이

inpa.tistory.com

 

(3) 다형성(polymorphism = poly + morphism)

   오버로딩(overloading) : 함수 이름의 재사용

   오버라이딩(overriding) : 부모에 정의된 함수를 자식이 재정의

 

* 바인딩(Binding) == 묶는다

   정적 바인딩 (static binding) : 컴파일 시점 결정

   동적 바인딩 (dynamic binding) : 실행 시점 결정