WinCNT

제1강. Object Oriented Programming (C++) 본문

게임 프로그래밍(학습 내용 정리)/C++

제1강. Object Oriented Programming (C++)

WinCNT_SSS 2021. 12. 8. 17:07

Object Oriendted Programming

객체 지향 프로그래밍

 

C에서는 없는데 C++에는 있는 것

C에는 객체 지향 프로그래밍에 필요한 요소들이 없음(캡슐화, 상속 등등)

구조체에 함수를 추가할 수 있는 것도 그 차이의 쉬운 예

 

C의 문제점

  • 데이터와 함수가 응집성을 갖추지 못 했다
  • 사실상 전역 변수와 함수들로 이루어진 모듈
  • 다른 프로그래머가 몰라도 되는, 몰라야 하는 부분을 숨길 수 없다(언어적으로)

상세 설명

데이터와 함수가 응집성을 갖추지 못 했다

  1. 데이터와 함수가 사실상 연관되는 부분이 없다
  2. 한 구조체에 대해서 작동하는 함수는 계속 그 구조체를 인자로 받아야 한다

예를 들어 횡스크롤 액션 게임에서 플레이어의 정보(위치 좌표, HP 등등)을 구조체에 보관했다고 가정하자.

그리고 그 플레이어는 이동하거나 데미지를 받는 경우가 있다고 하자.

 

그럴 경우는 이동하거나 데미지를 받을 경우에 대해서 함수를 코딩할텐데, 

C언어에서는 플레이어의 구조체와 이동/데미지 처리 함수가 실질적으로 연관성을 가지지 못 한다.

즉, 몬스터나 적 구조체 등이 플레이어를 위한 함수를 이용하는데 아무런 제약이 없다고 할 수 있다.

(물론 프로그래머가 조심하거나, 함수 처리를 동일하게 고안할 수는 있지만 언어적으로는 딱히 제약이 없음)

 

또한 이동이나 데미지 처리 함수의 인자로 항상 플레이어의 구조체를 인자로 넘겨주어야 하는데

이 과정에서 상당히 낭비가 발생한다.

 

하지만 C++에서는 클래스 등으로 위와 같은 문제점들을 해결할 수 있다

 

다른 프로그래머가 몰라도 되는, 몰라야 하는 부분을 숨길 수 없다

C에서는 은닉화 지원이 없다

C++

프로그래밍 패러다임

  • 절차적 패러다임
  • 함수형 패러다임
  • 객체 지향 패러다임
  • 제네릭 패러다임

다중의 패러다임을 가지고 있다

좋게 말하면 유연함, 나쁘게 말하면 잘못 사용하게 될 여지가 많음

 

기초는 C++98

보통은 C++11 문법을 주로 쓰게 될 것

C++17도 최근에는 자주 등장하게 되었다

 

Etc - 헤더와 cpp를 나누는 이유

헤더가 꼬이는 것을 막는다

인터페이스와 구현을 분리할 수 있다

(디자인 패턴으로는 브릿지 패턴)

 

SSS

'게임 프로그래밍(학습 내용 정리) > C++' 카테고리의 다른 글

다중 상속과 RTTI(Runtime Type Information)  (0) 2021.12.17
다형성(Subtype Polymorphism)  (0) 2021.12.16
상속  (0) 2021.12.14
동적 메모리 할당, 복사 생성자  (0) 2021.12.10
클래스(Class)  (0) 2021.12.09