728x90
defer 무한루프
defer에 대해 배웠는데, 예외처리 하는 곳에서 자꾸 무한루프가 발생했습니다.
결론부터 말하자면, 원인은 nil 처리를 안해서 그랬습니다.
package main
import "fmt"
func test() {
var num int
fmt.Scanln(&num)
defer func() {
if r := recover(); r != nil {
fmt.Println(r) //에러 메시지 출력
test()
}
}()
if num <= 0 {
panic("잘못된 입력 입니다.")
}
}
func main() {
test()
}
panic이 발생할때 뿐만 아니라, test() 함수가 끝날때도 defer 함수로 오기 때문입니다. nil 처리를 안하면 무한루프를 타게됩니다.
panic & recover
패닉; 종료되기 이전에 "걸어두는 느낌"
리커버: nil 과 사용
하면서 느낀게 중요한것은 함수를 다른곳에서 호출하게 만들면 코드의 응집도(Cohesion) 이 깨져. 각 호출됨에 따른 리턴을 처리해줘서 별로 안좋은걸 느꼈습니다. (link)
728x90