2주차 과제 : 야구게임 만들기 트러블 슈팅

이진욱(JIN WOOK)·2024년 11월 10일
0

과제에관하여

목록 보기
1/6

폴더를 분리하는 과정에서 생긴 문제에 대해서 다룹니다.

저는 크게 인터페이스, 로직, 데이터로 디렉토리 변경을 시도 했습니다.

하지만 분리하면서 여러가지 문제가 발생했습니다.

그중 게임 메뉴중 2번 게임 기록 보기를 눌렀을때 발생했던 문제에 대해서 다루겠습니다.


"1. 게임시작하기 2. 게임기록보기 3. 종료하기"

2번 게임 기록보기의 경우 정상적으로 작동하면 이런식으로 출력이 되야 합니다.

게임 시작 횟수와 시도횟수가 지속적으로 누적되어 출력되야 합니다.

하지만 폴더를 분리하면서 해당 기능이 정상적으로 작동하지 않았습니다.

기록 자체가 저장이 되지 않아서 ui영역에 속하는 "게임기록" 만 출력 되었습니다.


2번 선택시 실행되는 로직은 UserInputData 에서 관리가 되도록 구현을 해놨습니다.

로직은 이와 같습니다.

유저 인터페이스를 담당하는 인스턴스 ui에 접근해 해당 케이스에 맞는 print 문을 출력해냅니다.

그리고 데이터에 접근해

이와 같이 출력해냅니다.

이 데이터들은 BaseBall 클래스 , GameLogic 클래스에서 값이 할당됩니다.

BaseBall 클래스 - saveGameCount 증가

GameLogic 클래스 - saveTryCountNum 증가


코드를 자세히 살펴보니 UserInputData 인스턴스를 생성한게 문제임을 깨달았습니다.

인스턴스를 새롭게 생성한 꼴이라

모든 데이터가 Data 클래스내 초기값으로 설정이 되어 Data클래스의 printRecord() 메서드 내 for문 자체가 작동을 하지 않았던 것이였습니다.


도저히 해결책이 떠오르지 않아 튜터님을 찾아뵙고 질문드리게 됐습니다.

여기서 해결책에 대한 힌트를 얻었습니다!

클래스와 구조체에 대한 차이점도 조금 더 확실하게 알수 있었습니다.


튜터님 : Data()가 클래스로 선언 되었다고 가정할때

data와 data2의 값은 같을까요?

답은 "같다"

그 이유로는

클래스는 참조타입으로 주소 자체가 전달 됨으로

Data() 주소가 001 일때

data2에도 001이라는 주소가 저장이 됨으로 값이 같다는걸 깨달았습니다.

즉, Data() 인스턴스는 하나만 생성을 하고 나머지 클래스에 공유를 하게 되면 데이터가 지속적으로 저장된다. 라는

핵심 힌트를 얻을 수 있었습니다.


사실 "아직은" 해결하지 못한 문제랍니다.

시도하면서 여기저기 인스턴스를 생성하면서

Message from debugger: Xcode has killed the LLDB RPC server to allow the debugger to detach from your process. You may need to manually terminate your process.

라는 에러 메세지도 뜨고.. (순환 참조로 인한 문제)

아예 메뉴ui도 안뜨는 문제도 생겼었지만 튜터 님께 얻은 힌트 때문에 약간은 희망이 보입니다..

profile
기술로부터 소외 되는 사람이 없도록 우리 모두를 위한 서비스를 만들고 싶습니다.

0개의 댓글

관련 채용 정보