(※ 실제 코드 유출 방지를 위해 약간의 코드 변형을 하였습니다.)
func handleChatInputText(text: String, zoneId: Int, chatType: String) {
if self.editMode, let editingMessageId = self.editingMessageId {
self.modifyMessage(id: editingMessageId, message: text)
} else {
self.zoneId = zoneId
self.chatType = chatType
self.sendMessage(text: text) // zoneId와 chatType을 가지고 api 호출하는 함수
}
}
struct ChatInputInfo {
let text: String
let zoneId: Int
let chatType: String
}
func handleChatInputText(info: ChatInputInfo) {
if self.editMode, let editingMessageId = self.editingMessageId {
self.editMessage(id: editingMessageId, message: info.text)
} else {
self.sendMessage(text: info.text, zoneId: info.zoneId, chatType: info.chatType)
}
}
이 코드는 실제로 현업에서 hotfix로 대응했던 코드이다.
클래스 변수를 이용하는 api를 호출하는 코드와 그 클래스 변수를 수정하는 데에서 시간적인 결합이 일어났고 간헐적인 NP에러가 발생하였다.
코드가 당연히 위에서 아래로 동기적으로 일어날 것으로 생각하는 초보적인 실수였다. 안전하게 되도록 순수 함수 프로그래밍을 하자!