[UE5 TIL] Day 16 - C++ 학습/과제 작성

JungHoon Eum·2026년 3월 18일

C++ 라이브 세션

소멸자

-strlen(변수명) -> string 길이 반환

  • main 에서 동적할당으로 클래스 만든 후 delete 안하면 -> 그 할당된 메모리도 릭 나고 할당된 클래스의 소멸자도 호출 안되서 클래스 내부에서 할당한 메모리도 할당 해제 적용 안됨.
  • 반환자료형 함수명(매개변수자료형 매개변수명) const 에서 const -> 여기선 멤버변수 변경 안하겠다는 약속. 헤더와 소스코드 둘 다 붙여야 함에 주의!!

Getter & Setter

  • 자료형 GetX() const, void setX(자료형 변수명)

클래스 전방선언

  • 컴파일러는 위에서 아래로 읽어나간다

  • 아래에 있는 클래스 참조, 이용하면 에러

  • 맨 위에 class Inventory; 선언해 두면 괜찮아짐

    • BUT 포인터만 된다 -> 실제 객체 Inventory myInventory는 불가능 (해당 class의 내용물을 모르기 때문)
  • 전방 선언은 그냥 어딘가에 정의 있으니 나중에 찾으면 되는 건 냅둬라 하는 것

  • 내용물까지 알 수 있게 하려면? 헤더파일을 쓴다.

  • 왜 항상 헤더만 쓰지 않는가? 하나의 헤더파일만 수정되어도 모든 클래스들이 영향을 받고 재컴파일

  • 객체 포인터 자료형이면 전방선언, 값 자료형은 include: 전방선언은 다른 파일에 있는 클래스에도 헤더처럼 적용가능!

  • 의문점:

class PlayerCharacter
{
public:
	Inventory MyInventory
}//이결 해결하는 방법이 헤더 include

이너 클래스로 해결?
해당 클래스 파일 내에 두 가지 이상의 클래스 선언 후 서로가 서로를 "값 자료형" 으로 가질 때 - 이너 클래스로 해결하던지...

  • 사실 그냥 애초에 이 케이스가 나오면 안된다. 하나를 포인터 자료형으로 처리해서 전방선언 하던지 아니면 그냥 파일을 분리해서 #include 하던지.

friend 키워드

class X
{
	friend class Y;
    
    public...

이런 식으로.

  • 부모 클래스 X에 선언된 protected/private 멤버는, 그 멤버가 자손 클래스 Xson 객체에 포함되어 있어도 Xfriend class Y가 접근 가능하다.
    하지만 Xson 자체에서 새로 선언한 private/protected 멤버는 Y가 접근할 수 없다.
  • Y의 자손들 모두 X의 멤버 볼 수있게 하려면?
    • 일일히 다 friend 선언할 수 없으니 Y 내에서 해당 변수들 받아와서 setter, getter 만들어서 처리

상속과 다형성, 추상 클래스

순수 가상 함수

  • 가상 함수 쓰는 이유->부모쪽 포인터로 자손 클래스를 받아왔을 때(업캐스팅) 그거 부모쪽 함수 아니고 자손 쪽 함수 불러오려고.
  • 순수 가상 함수 vs 가상 함수
    • 가상 함수: 부모의 구현 있고/자식이 선택적으로 재정의 가능/부모 클래스 객체 생성 가능
    • 순수 가상: 부모 구현 없고/ 자식 재정의 필수/부모 객체 불가능
  • 부모 쪽에서 virtual 붙힌 함수는 어차피 자식에서도 가상 함수다. but 앞으로의 확장성/가독성 위헤 virtual void 붙혀주는 것. 이거 오버라이드다 하고.
    • 사실 자식 쪽에 virtual 대신 override 함수 뒤에 붙혀 주는 게 더 안전. void X() override
  • I 붙은 클래스는 인터페이스 -> C++에선 지원 안하긴 하지만 추상 클래스를 인터페이스로 쓰는 경우 많다.
    • 인터페이스를 쓰는 이유? "발이 달린 몬스터에게 쓸 수 있는 발묶기 스킬" 을 각기 다른 몬스터들에게 통합해서 적용할 수 있는 함수를 만들기 위해.

std::string

  • 사실상 char*[] 대체재라고 생각하면 된다.

Template Programming

  • 템플릿이 진짜로 "모든 자료형을 받을 수 있는" 게 아니라
  • 인스턴스화(함수/클래스 객체 실제로 만들 때) 받는 자료형에 따른 함수/클래스를 만들어 주는 것
    -myClass<int>, myClass<float> 이런 식으로 다양하게 만드는 것.
template <typename T>
T add (T inA, T inB) {} //이건 입력값 둘 다 한 자료형이여야
//두 자료형을 받을 수 있는 걸 만드려면?
template <typename T, typename U>
T add (T inA, U inB){} //이런 식으로
  • inline: 함수 앞에 붙여서 헤더에 함수 정의해도 괜찮도록 하는 단어. (템플릿 때 많이 쓴다)

언리얼 엔진 C++

  • 언리얼 엔진 프로젝트 생성할 때 Blueprint 대신 C++
  • 프로젝트 초기화: 프로젝트 폴더에서 폴더 Config, Content, Source, 프로젝트명.uproject 만 남기고 나머지 싹 다 삭제. 이후 uproject 파일에 shift+우클릭으로 Generate Visual Studio project files
  • .sln 파일 열고 F5 누르면 바로 언리얼 에디터 열리고 라이브 에디팅 가능해 진다. Development Editor 상태로 해야 에디팅 원활하다는 점에 주의
  • Ctrl+Shift+B: 프로젝트 빌드
    F5: 빌드 및 실행
    Shift+F5: 실행 중인 언리얼 에디터 종료
    Ctrl+Shift+F5: 실행중인 언리얼 에디터 종료 후 빌드 및 실행. 이렇게 해서 코드 수정된 거 언리얼에 적용할 수 있다.
#pragma once

#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "MyClassUnrealObject.generated.h"

/** 
 * 
 */
UCLASS()
class MYCLASS_API UMyClassUnrealObject : public UObject
{
	GENERATED_BODY()

};
profile
개발지망생

0개의 댓글