[TIL] Text RPG 제작하기(8)

주소리·2026년 7월 24일

TIL

목록 보기
31/48

여태 몰랐던 대단하진 않지만 엄청난 기능이 있습니다.
여기서 클래스를 선택하면 cpp와 h파일이 같이 생기는군요.

따로 만드는 게 그렇게 힘든 일은 아니지만? 편리하니 애용해야겠습니다. 그도 그럴게 클래스를 한두번 만들 게 아니니 말입니다.

이렇게 필요한 사항이 알아서 기입되어 있으니 좋기도 합니다.
나중에 <비주얼 스튜디오, 몰랐지만 편리한 기능들> 모음을 만들어도 좋겠단 생각이 듭니다. 툴은 좀 자기 몸처럼 사용할 줄 알아야 응용이 가능하다고 믿기 때문입니다.

각설하고 작업을 개시합시다.
이번엔 직업(자식)들이 상속받을 Player(부모) 클래스를 만들어야 합니다.
상속 + 다형성 + 생성자 초기화를 연습할 수 있는 절호의 기회!

앞서 작성했던 인벤토리 클래스와 다르게 여기선 protected를 써줍시다. 그래야 추후에 자식 클래스에서 수정이 가능합니다.

private → Player 내부에서만 접근 가능
protected → Player와 자식 클래스에서 접근 가능


일단 클래스 선언 1차가 완성되었습니다.


그리고 이렇게 하면 안되는 것 같죠?
매개변수로 받은 hp, mp, power, defence를 멤버 변수에 넣는 방식으로 가야 하는데, 여기서 문제는 매개변수와 멤버 변수 이름이 같다는 지점입니다.
이를 구분하기 위해 this->를 사용해줍니다.

this->hp = hp;
왼쪽은 멤버 변수, 오른쪽은 매개변수


스파게티가 말끔히 없어졌습니다.

다만 this 개념이 햇갈리니 다시 정리하겠습니다.

this->name = name;
= 이 객체가 가진 name 멤버 변수에
생성자로 들어온 name 값을 넣어라

먼 옛날에 언리얼을 처음 만지작 거릴 무렵, get과 set의 개념 이해가 제법 어려웠습니다. 보기에 get은 그냥 어디에 붙이는 것 같았고, set은 중간에 실행핀에 기워져 기능할 때가 많았다 정도만 직관적으로 알았지만, 이게 본질적으로 어떻게 다른가에 대해 설명하라면 설명할 수 없었습니다. 깊이 있게 이해하기엔 당자 마감이 급해 미뤘지만 이번 기회에 이 불쾌한 인지오류를 해결하고 확정지을 수 있을 듯 합니다.

getter

  • 값을 읽어오는 함수
    setter
  • 필요한 값들을 바꾸는 함수
    특히 자식 클래스나 외부에서 스탯을 조정할 때 사용 가능

이러니 언리얼에서 왜 그렇게 쓰였는지 이해가 갑니다.


선언을 해줍니다.

틀려서 고쳤습니다. 이렇게 쓰는게 맞군요.
get은 앞에 자료형을,
set은 받을 변수를 적어야 합니다. 이제 좀 get/set이 와닿습니다.

근데 그러고 보니 생성자에 레벨이나 직업은 지금 안 넣어도 되나 헷갈립니다.

레벨은 그냥 처음에 1로 초기화 하고, 직업은 자식 클래스에서 변경하는 방향이 합리적일 듯 합니다. 나중에 자식 클래스를 만들면서 보완하도록 하고 넘어가죠.


이렇게 선언을 마쳤으나 printPlayerStatus는 매개변수가 없어도 된다고 합니다. 멤버 함수는 같은 클래스 안의 멤버 변수에 직접 접근할 수 있기 때문에, 상태 출력 함수가 굳이 job, level을 매개변수로 받을 필요가 없기 때문이라고 하는군요.

그러면 유사했던 Inventory.h를 같이 살펴보면 좋을 것 같습니다.

여기선 int ItemType이 새로은 매개변수 선언이기 때문에 적었었군요.

이어서 Play.cpp에서 함수를 정의해보겠습니다.

왜 스파게티?

setName은 선언처럼 세미콜론을 붙이면 안 되고, 함수 몸통을 바로 써야 해요.

아.
바로 바꾸어 주었습니다.

근데 작업하다보니 레벨은... set하면 안되지 않나 싶었습니다. 그러니까 public에 얘가 있으면 사용자가 접근 가능한 거 아닌가?


좋은 방향을 알게 되었습니다. 7세 아동이 되어 무수한 질문으로 부모님을 귀찮게 구는 기분입니다. 하지만 AI는 감당해주시겠죠?

profile
게임개발 및 아트, TA

1개의 댓글

comment-user-thumbnail
2026년 7월 26일

비주얼 스튜디오, 몰랐지만 편리한 기능들 기원 1일차

답글 달기