3.8 Concept Note - Run Loops & Timer

Jay·2025년 2월 6일

Level 3 - SingleView App

목록 보기
8/24

앱을 실행시켜서 뷰에 특정한 동작을 행했을때 사용자는 그에 따른 적절한 반응을 기대한다.
예를 들어 어떤 버튼을 터치하면 소리가 나게 할 수도 있고, 화면을 스와이프하면 전환이 되도록 할 수 있다.
이런 반응들이 가능한 이유는 메인스레드(Main thread)에서 사용자의 입력을 기다리는 런루프(Run loop)가 실행되고 있기 때문이다.

이 어려운 말의 이해를 돕기 위해 정확히 들어맞지 않지만 적당한 비유를 들자면, 대형마트의 캐셔를 생각해볼 수 있다.

물건을 구매하고 계산하기 위해 계산대앞에 줄을 서서 기다린다. 기다리는 사람을 하나의 ‘입력’이라고 본다면 캐셔는 하나의 ‘스레드’, 물건을 올려놓는 계산대를 ‘런루프’로 비유해 볼 수 있다.
계산대에서 캐셔는 당장 계산할 물건이 없어도 대기하고 있다. 사람들이 하나둘씩 물건을 계산대에 놓기 시작하면 캐셔는 바빠진다. 하나의 계산이 끝나면 컨베이어 벨트를 작동하여 그 다음 물건을 계산한다.
사람이 엄청나게 많은데 계산대가 하나라면 계산을 끝내는데 상당히 많은 시간이 소요 될 것이다.

따라서 규모에 맞게 적정한 수의 캐셔(스레드)와 계산대(런루프)가 필요하다.

특히 사용자에게 보여지는 UI(User Interface)는 반응을 즉각적으로 처리해야 하므로 프로젝트의 생성과 동시에 만들어진 메인스레드에 위치한 런루프가 이벤트를 처리한다.

이러한 런루프에 특정 시간에 특정한 메서드를 실행시키고 싶다면 Timer 를 이용하여 설정한 시간에 실행되도록 런루프에 추가하면 되는 것이다.

profile
Software Engineer Specialized on iOS

0개의 댓글