[TIL] CalculatorApp 트러블슈팅

Eden·2025년 6월 20일

🔍 문제 상황

커스텀 버튼 CircleButton 내부에서 아래와 같이 액션을 설정하고 있었음:

addTarget(nil, action: model.action, for: .touchUpInside)

처음에는 정상 작동하는 것처럼 보였지만, 런타임에서 예기치 않은 동작이나 버튼이 아예 동작하지 않는 문제가 간헐적으로 발생함.


⚠️ 원인 분석

  • target: nilResponder Chain을 통해 동작 대상을 탐색하게 됨
  • 하지만 이 방식은 의도치 않게 다른 대상이 호출되거나, 호출되지 않을 수 있음
  • 특히 커스텀 버튼이 UIViewController 외부에서 생성되거나 생명 주기 제어가 어려울 경우 예측 불가한 동작 발생

✅ 해결 방법

버튼을 생성하는 시점을 ViewController 쪽으로 끌어올리고, self를 명시적으로 지정:

🔧 변경 전

return CircleButton(model: model)

🔧 변경 후

let button = CircleButton(model: model)
button.addTarget(self, action: model.action, for: .touchUpInside)
return button

즉, addTarget은 ViewController가 버튼을 생성하는 시점에서 직접 연결하는 것으로 수정함.


💡 정리 및 교훈

  • addTarget(nil, action: ..., for: ...) 은 되도록 피하고 명확한 target 지정이 안정적임
  • 버튼 생성과 액션 연결은 ViewController에서 통합 관리하는 것이 유지보수에 유리함
  • 커스텀 UIComponent 내부에서는 UI 구성만 담당하고, 로직은 외부에서 제어하는 방식이 적절함

✅ 결과

  • 버튼 동작 정상화
  • 디버깅 시 target/action 연결 명확
  • 역할 분리로 코드 가독성 향상 ✨
profile
iOS Dev

0개의 댓글