layoutSubviews()는 재귀적으로 자식들의 layoutSubviews()도 재귀적으로 실행
앱이 실행되면 iOS는 내부적으로 메인 스레드에서 main run loop를 실행
iOS는 UI를 업데이트할때 업데이트하는 일정의 시간을 두어서, UI 렌더링은 값비싼 작업이기에 효율적으로 업데이트하기 위해 Main Run Loop를 만든 것
layoutIfNeeded()가 호출되면, UI를 업데이트 하라는 queue에 뒷쪽에 넣는것이 아니라, 맨 앞쪽에 넣어서 곧바로 UI가 변경되기를 기대할수있는 메소드
해당 메소드가 호출되면 Update Cycle을 바로 실행하여 레이아웃이 즉각적으로 적용
2.0초동안 layoutIfNeeded() 메소드를 실행시킨다는 의미 -> Main Run Loop에서 2.0초동안 레이아웃을 업데이트