본문 바로가기
생각

왜? 왜? 왜?

by 치우치지않는 2024. 4. 12.

1. 왜? 를 묻는 것이, 복잡한 현상을 이해하기 위한 첫걸음이라는 사실을 잊고 있었다. 그리고 그걸 잊었다는 사실을 오늘 깨달았다. 메이커스 작업을 하면서 코드리뷰를 달 일이 생겼는데, 그때 그 친구가 남긴 코드와, 그에 대한 답변을 달아주기 위해 코드를 정확하게 이해했어야 했다. 그런데 setTimeout 이 있는 쓰로틀 함수여서, 그냥 한 눈에 이해되기는 쉽지 않았다. 그래서 계속해서 왜? 를 물었다.

 

왜 setTimeout 을 썼지? 

>> callback 함수를 실행하는 동안 사용자의 중복 submit 을 멈추려고 

>> 그럼 타이머는, 사용자가 클릭하지 못하는 시간을 설정하기 위해 만든 것이구나. 

>> 그럼 타이머가 끝나면? 다시 처음과 같은 상태로 돌아가는구나. 그리고 이 친구는 이때 null 이 들어가니까, 타이머가 메모리에서도 없어진다고 생각했구나. 

>> 그런데 ref 는 왜 썼을까? 타이머의 ID 를 참고해서 타이머에 접근하려고 썼구나. 

>> 그럼 ref 가 참조하고 있는 건 타이머의 ID 인데, 참조하고 있는 타이머의 ID 를 null 로 초기화한다고 해서 타이머가 메모리에서도 삭제될까? 그럼 clearTimeout 은 왜 있을까?

 

>> 결론 : ref 로 참조하는 타이머의 ID 를 null 로 초기화할 순 있지만, 메모리에서 완벽히 삭제하기 위해선 clearTimeout 을 써야 하는 구나. 

 

나아가 만약 clearTimeout 을 사용하지 않는다면, 자바스크립트 엔진의 가비지 콜렉터가 타이머를 없앨 때까지 쓸데없는 메모리를 잡아먹을 수 있겠다는 생각도 들었다. 

-> 모던 자바스크립트 딥다이브와 같이 엄청 두껍던... 자바스크립트 동작 원리에 대한 책을 꾸역꾸역 읽던 것이 이렇게 도움이 될 줄은 몰랐다. 이래서 이론이 중요하다는 것이구나.

 

.

.

 

사실 고등학생 때 수능 준비를 하면서도 내가 써먹었던 방법이, 5 Why 였다. 즉 어떤 문제를 틀렸다면, 그냥 넘어가지 않고, 내가 틀린 이유에 대해서 최소한 5번의 왜? 를 묻는 방법. 이를 통해 내가 가지고 있던 근본적인 실수들을 바로잡을 수 있었고, 수능도 잘 봤는데 이 중요한 교훈을 여태껏 잊고 살았던 것이다. 

 

댓글