[TIL] BaseballGame 트러블슈팅

Eden·2025년 6월 9일

문제 요약

BaseballGame을 구조체(struct)로 만들고, 내부에 start() 함수를 정의했습니다. 그런데 게임이 끝난 후 기록을 저장하는 recordManager.add(trialCount:) 코드를 작성하던 중 컴파일 에러가 발생했습니다.

다음과 같은 코드에서 문제가 발생했습니다:

struct BaseballGame {
    var recordManager = RecordManager()

    func start() {
        // ❌ 컴파일 에러 발생!
        recordManager.add(trialCount: trialCount)
    }
}

에러 메시지는 다음과 같았습니다:

Cannot use mutating member on immutable value: ‘self’ is immutable

원인

Swift는 구조체 내부에서 self의 속성을 변경하려 할 때, 해당 함수에 mutating 키워드가 명시되어 있어야 합니다. 위 에러는 recordManager.add(...)self 내부의 상태를 변경하기 때문에 발생한 것입니다.

즉, recordManager가 구조체(RecordManager)이며, add(trialCount:)는 내부 배열 records를 변경하는 mutating 함수이기 때문에, 이를 호출하려면 start() 역시 mutating이어야 합니다.

그래서 이렇게 해결했습니다

다음과 같이 mutating 키워드를 함수 선언 앞에 추가해줬습니다:

struct BaseballGame {
    var recordManager = RecordManager()

    mutating func start() {
        // ✅ 정상 작동
        recordManager.add(trialCount: trialCount)
    }
}
profile
iOS Dev

0개의 댓글