제목을 본 사람들의 반응은 크게 세 가지로 나뉠 것으로 예상하는데요,
- "이게 무슨 말이냐..."라고 의문이 드셨을 분,
- "아 이 밈 중독자 [검열됨] 또 이러네"라고 생각하셨을 분,
- "뭔가 사라지는 버그를 발견했나 보구만"이라고 눈치채신 눈치 빠른 분.
네.
이 포스트는 무언가 사라지는 버그를 잡는 과정을 기록한 포스트입니다.
이 글을 눈치 빠른 3번 유형의 사람들에게 바칩니다.
백문이 불여일견이라고, 일단 보여드리겠습니다.
네... 말이 필요없죠...
굳이 말로 풀어서 쓰자면,
음료 갯수를 더하거나 빼면 갯수를 표시해주는 라벨이 뒤틀리거나 사라지는 버그입니다.
아니 왜 이러는 걸까요?
생각을 해봅시다.
연산 프로퍼티 didSet을 사용해서 라벨의 텍스트가 변경되는 방식이라, 그 녀석을 의심했습니다.
근데 암만 봐도 그건 아닌 것 같더라고요. 그랬다면 애초에 초기 설정부터 이상하게 되었을 테니까요.
라벨 레이아웃이 뒤틀리는 것으로 보아,
라벨을 설정해주는 함수를 라벨이 바뀔 때 마다 다시 호출해야 하나?라는 생각도 했습니다.
그리고 이런저런 생각을 머릿속으로 했지만 결과적으론 틀린 추론이었습니다.
그래서 답답한 마음에 계속해서 버그를 뚫어져라 보다보니 미묘한 점을 발견했습니다...
버튼을 클릭할 때 가격 표시와 +/- 버튼이 움찔거리는 것이 보이시나요?
저기가 뭔가 의심스러웠습니다.
그리고 그 의심은 아래에서 점점 확신이 되어갔습니다.
그래서 일부러 고장내고 View Hierarchy를 보고 단서를 찾으려고 하였습니다.
위의 View Hierarchy를 토대로, 아래와 같이 추측했습니다.
- 음료의 갯수를 표현하는 숫자 라벨의 너비가 변경됨 (1 >> 2나 9 >> 10 처럼 너비가 크게 변하면)
- 그 숫자 라벨을 둘러싸고 있는 -/+ 버튼의 위치가 오락가락함.
- 숫자가 바뀌면서 오락가락하다가 뷰가 무너짐. (이에 대한 정확한 명칭은 잘 모르겠습니다...)
설마 숫자 라벨에 constraint가 적용이 안 되어서 와장창 무너진 것은 아닌가?
라는 가설을 세우고, 해결하기 위해 아래 코드로 숫자 라벨의 widthAnchor와 heightAnchor의 constraint를 지정해줬습니다.
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
label.widthAnchor.constraint(equalToConstant: 10)
label.heightAnchor.constraint(equalToConstant: 10)
])
문제가 확인되었을까요?
빌드를 눌러서 확인해봅시다.
빌드가 안되네?
아
급하게 하느라 쉼표를 까먹었읍니다
ㅎㅎㅎ...
넣어주고 다시 해봅시다.
오...!
좀 찌부되긴 했는데 여튼 일단 해결했잖습니까?
해결 방법을 발견하고 신나서 버그를 발견한 팀원에게 자랑을 하고 밥을 먹으러 갔습니다.
근데 밥을 먹고 온 사이 팀원이 코드를 수정하였다네요...?
어... 음... 떠넘기려는 건 아니었는데 그게... 그렇게 보이긴 하네요;
열심히 일한 우리 팀원에게 큰 박수 부탁드립니다.
여튼 팀원이 수정해준 최종 결과물은 이렇습니다:
깔끔하네요.
이렇게 해피해피엔딩이었다면 좋았겠지만...
저희 팀은 또 다른 문제를 맞닥뜨리게 됩니다.
(대충 다음에 계속된다는 소리)
너모 재밋고