26.04.30
cpp파일 코드를 좀 더 명확히 이해하기 위해 작성했던 코드들을 세분화 하여 AI에게 질의응답을 요구했다. (왜 이코드가 사용 되었는가? 코드의 의미분석?)
+강의를 들으며 궁금했던 내용 포함
헤더 파일이 여러 번 포함되는 것을 방지
중복 정의 에러 예방
언리얼에서 자주 사용하는 기본 기능 모음
사실상 “언리얼 최소 스타터 패키지”
AActor 클래스를 사용하기 위해 필요
Actor를 상속받으면 월드에 배치 가능한 객체가 됨
Unreal Header Tool(UHT)이 생성한 코드 연결
리플렉션, 블루프린트 기능을 위해 필수
⚠️ 항상 include의 마지막 줄에 위치해야 함
UCLASS()
class MYPROJECT2_API AMyActor : public AActor
{
GENERATED_BODY()
};
클래스를 언리얼 엔진에 등록
블루프린트 및 에디터에서 사용 가능
엔진이 자동으로 코드 삽입
리플렉션 및 내부 기능 지원
게임 월드에 배치 가능한 객체
BeginPlay, Tick 등 사용 가능
“누가 접근할 수 있는가를 결정”
public → 외부에서 호출해야 할 때
protected → 자식 클래스까지 허용할 때 (상속 허용)
private → 완전히 내부 전용
👉 내부에서만 사용하는 함수라면
→ private가 가장 적절
❗ 중요한 구분
접근 지정자 → 누가 호출할 수 있는가
자동 실행 → 언제 호출되는가
BeginPlay() → 시작 시 1회 실행
Tick() → 매 프레임 실행
Timer → 일정 시간 간격 실행
void Move();
👉 “이 함수가 존재한다” (메뉴판)
void AMyActor::Move()
{
// 실제 동작
}
👉 “이렇게 동작한다” (요리법)
선언 ≠ 정의
정의가 없으면 링크 에러 발생
void Move(); → 선언
{ ... } 있음 → 정의
데이터 + 기능을 하나로 묶어서 관리하는 방식
내부 데이터 숨기기
필요한 인터페이스만 공개
기존 클래스 재사용
코드 중복 감소
같은 함수, 다른 동작
virtual, override 사용
중요한 것만 보여주고 나머지는 숨김
개념 (설계 철학)
구현을 숨기고 인터페이스만 제공
virtual void Move() = 0;
구현을 강제하는 도구
“반드시 자식이 구현해야 함”
추상화 = 개념
순수 가상 함수 = 구현 방법 중 하나
클래스로 실제 객체를 만드는 것 (재정의, 구현)
💡 비유
클래스 → 설계도
인스턴스 → 실제 건물
MyActor Actor;
👉 객체 생성 완료 → 함수 사용 가능
GetWorld()->SpawnActor();
👉 월드에 실제 Actor 생성
헤더 파일은 “설정 + 연결”
클래스는 “설계도”
인스턴스는 “실제 객체”
접근 지정자는 “접근 범위”
자동 실행은 “엔진 이벤트로 결정”
선언과 정의는 반드시 구분
추상화는 개념, 순수 가상 함수는 도구
Player와 Enemy를 만든다면 어떤 걸 부모로 올릴까?라는 질문에 있어서 만약에 Player나 Enemy의 부모가 홀수이거나, 자연수가 아니라면 Goa함수를 써야할수도 있는걸까요? 아니면 Parents(Unknown)인걸까요? 정말 궁금합니다.