프로젝트공부아이디어
    • 2월
    • 1월
  • 30

    26. 1. 30.

  • 29

    26. 1. 29.

  • Day9

    26. 1. 27.

  • Day8

    26. 1. 26.

  • Day5

    26. 1. 23.

  • Day1

    26. 1. 22.

  • Day2

    26. 1. 22.

  • Day3

    26. 1. 22.

  • Day4

    26. 1. 22.

로딩 중...

Day9

2026. 1. 27.

상속 중 has-a 관계

다중상속은 위험하므로 다중상속이 필요할 때 소유 상속으로 대처한다 https://gameprogrammingpatterns.com/contents.html Actor - 여러개의 컴포넌트 소유, 소유한 컴포넌트들이 해당 클래스를 역으로 설명한다

연산자 오버로딩

  • 연산자도 똑같은 함수임을 기억할 필요가 있다
  • Point p3 = p1 + p2;= p1.operator+(p2)

.과 -> 차이?

  • .은 객체에 직접 접근할 때 사용
  • ->는 포인터를 통해 멤버에 접근할 때 사용

라이브러리

결국 모듈들이 이진코드로 변환됨 함수를 실행하려면 함수의 명세가 담긴 헤더 파일은 꼭 있어야 함

.lib

실행될 때만 분리돼있고, 컴파일 단계에선 아예 exe에 합쳐진다

  • 코드베이스 덩치 커지므로 메모리 부담이 됨

.dll

런타임에 동적으로 끌어와 사용하기 때문에 배포할 때도 분리돼있어야 함

  • 가벼움
  • 실행 중에 dll 메모리 공간에 접근해 자원을 가져와야 함
  • 메모리 점프할 때마다 os의 허가를 받아야 하는 등 속도가 느림 dll 추출하기
  • xcopy .\Bin\x64\Debug\Engine\Engine.dll .\Library\Engine\x64\Debug\ /e /y를 .bat 파일로 만들기 -> 파일 호출만으로 실행가능
  • ... dll이 성공적으로 링킹되려면 exe와 같은 위치에 있거나 LoadLibraryA()

static

  • 전역변수에 static 붙이면
C++
// Static.h#pragma oncestatic int variable = 0;// File1.cpp#include "Static.h"void FileOneFn(){	++variable;}// File2.cpp#include "Static.h"void FileTwoFn(){	++variable;}// File1, variable 1// File2, variable 1// variable 공유 안됨
  • 공통 전역변수를 쓰고 싶으면 extern 키워드를 붙여야 한다
C++
// Static.hextern int variable;// File1.cpp#include "Static.h"void FileOneFn(){	++variable;}// File2.cpp#include "Static.h"void FileTwoFn(){	++variable;}// File1, variable 2// File2, variable 2// variable 공유됨
  • 지역 변수를 static 붙이면
C++
void IncreaseCount(){	static int count = 0;	++count;}int main(){	IncreaseCount();	IncreaseCount();	IncreaseCount();}// Count: 1// Count: 2// Count: 3
  • 클래스에서 static 변수 쓸 때
C++
class Person{private: 	char* name; 	int age; 	static int count; // static 멤버 변수 선언. }; // static 멤버 변수 초기화. // static 변수는 객체에 종속되지 않기 때문에 따로 초기화를 진행해야 한다. int Person::count = 1;
  • static 멤버의 특징
  1. main 함수가 호출되기 전에 메모리 공간(데이터 영역)에 올라가서 초기화된다. 따라서 public으로 선언이 된다면 객체 생성 이전에도 접근이 가능하다.
  2. 객체의 멤버로 존재하는 것이 아니다. 다만, 선언되어 있는 클래스 내에서 직접 접근할 수 있는 권한이 부여된다. (Person 안에서 Person:: 생략 가능)
  3. 객체에 멤버로 존재하지 않기 때문에 생성자에서 초기화할 수 없다. 따라서 별도의 static 멤버 초기화 문법을 사용해 초기화를 진행해야 한다.
왼쪽 화살표2629오른쪽 화살표