본 캠프 TIL

26.05.19 / C++ Text RPG 오류 수정, 도전 과제 , AI 튜터 에이타니 활용

jh009 2026. 5. 19. 20:22

오늘 한 것

1. C++ Text RPG 오류 수정

2. C++ Text RPG 도전 과제 도전 STEP 1 완료

3. AI 튜터 에이타니를 활용하여 도전 STEP 1 관련 문제풀이

4. CodeKata 문제 풀기


배운 점

값 전달: 원본을 복사한 복사본을 함수가 받는 것

포인터 전달: 원본이 있는 주소를 전달 → 주소를 따라가서 원본 수정 가능

참조 전달: 원본에 붙인 별명 → 주소를 따라가서 원본 수정 가능

 

일반 매개변수 → 값을 복사해서 받기 때문에 원본을 바꾸지 못함

포인터 매개변수 → 원본 데이터에 접근해 값을 변경할 수 있음

 

코드는 한 번 완성됐다고 오류가 안나지 않음. 오류가 나는지 종종 확인해야됨.


내일 할 것

1 .도전 STEP 2 - 레벨 & 경험치 시스템 (변수 활용) 진행중임

Player.cpp

void Player::gainExp(int amount)

void Player::levelUp()

부분 추가 후 최종본 완성 후 21일 제출 준비하기

 

2. AI 튜터 AI 진단 퀴즈 풀기

 

2. CodeKata 문제 풀기


느낀 점

AI 튜터를 활용해서 포인터의 개념을 다시 복습할겸 도전 과제를 할 수 있어서 너무 좋았다.

AI 튜터에게 질문을 했을 때, 학습자료 기반 답변을 해줘서 걱정이 없었다. (할루시네이션 방지)

특히나 문제풀이를 바로 내주며, 내용 이해와 복습까지 되어서 굉장히 좋았다. 앞으로도 자주 사용해볼 예정이다


오류 수정

몬스터를 처치해도 전투 패배 판정이 되었음. 

몬스터를 처치했을 때, 몬스터의 HP가 0이 아니라 음수로 내려가면 (예시: HP가 10 남았는데 30의 데미지로 -20이 됨)

→ 승리했어도 조건이 거짓이기 때문에 else문 전투 패배 판정이 돼버림.


몬스터 체력이 음수로 떨어져도 승리 판정이 되게끔 수정함


도전 STEP 1 - setPotion 함수 (포인터 심화)

 

포인터를 쓰지 않고 매개변수만 넘겼을 때 값이 바뀌지 않는 이유?

- 값 전달에서 원본 값이 복사되어 매개변수에 들어감

- 함수 안에서 바뀌는 것은 매개변수에 들어간 복사된 값임

- 원본 변수는 바뀌지 않고, 매개변수의 값만 바뀜


void setPotion(int count, int* p_hpPotion, int* p_mpPotion) 를 int main(void) 전에 써야되는 이유

- 컴파일러가 main을 읽을 때 void setPotion를 미리 알아야 함

- C++에서는 함수 안에 다른 함수를 정의할 수 없음

  • hpPotion = 값
  • &hpPotion = 주소
  • p_hpPotion = 주소를 담는 변수
  • *p_hpPotion = 그 주소로 가서 꺼낸 실제 값


AI 튜터 에이타니를 활용한 퀴즈

Q. 함수에 일반 int 변수매개변수로 넘기면, 함수 안에서는 원본복사본 중 무엇을 다루는지

A. 값 전달로 넘겼기 때문에 복사본을 다루게 됨.


Q. 값 전달 방식에서 함수 안에서 매개변수 값을 바꿨을 때, 원래 변수가 바뀌지 않는 이유

A. 매개변수는 복사본이기 때문에 복사본의 값을 바꿔도 원본의 변수 값은 바뀌지 않음.

 

Q. 포인터 매개변수 원본 값을 바꿀 수 있는 이유

A. 원본 변수의 주소를 받기 때문임 → 원본 변수의 주소를 받아 원본 값에 접근 가능

 

일반 매개변수는 원본 값을 복사해서 받기 때문에 원본 값을 직접 바꾸지 못함

But, 포인터 매개변수는 원본의 주소를 받아서, 그 주소를 통해 원본 값을 바꿀 수 있음


Q. *ptr 은 무엇인가

A. 포인터가 저장한 주소에 있는 실제 값

 

Q. *ptr = 50; 이 문장은 보통 무엇을 바꾸는 동작인지

A. 포인터가 가리키는 곳의 실제 값

 

Q. 함수 선언과 함수 정의의 차이

선언: 함수의 형태를 컴파일러에게 미리 알려주는 것

정의: 함수가 실제로 어떻게 동작하는지 본문까지 작성한 것

 

Q. 함수 선언이 필요한 이유

A. 컴파일러가 함수 호출을 볼 때, 이름 / 반환형 / 매개변수 정보를 미리 알아야 올바르게 해석할 수 있음.