[C#] 윈도우 애플리케이션 폼의 시작과 종료
윈도우 애플리케이션 폼의 시작과 종료, 이벤트를 알아보자!
안녕! 윈도우 Forms 애플리케이션을 만들다 보면 시작과 종료할 때마다 여러 이벤트들이 순서대로 발생하는 걸 볼 수 있어. 그런데 도대체 이게 언제 왜 일어나는 건지 궁금할 때가 있지? 오늘은 애플리케이션이 시작될 때랑 종료될 때 어떤 이벤트들이 일어나는지, 또 Load
와 Shown
, Closing
과 Closed
이벤트의 차이가 뭔지 간단히 정리해볼게!
애플리케이션 시작 시 이벤트 순서
애플리케이션이 딱 실행되면 주 폼(Form)에서 다음 이벤트가 발생해:
- Control.HandleCreated: 폼이 Windows와 통신할 핸들을 생성하는 단계야.
- Control.BindingContextChanged: 데이터 바인딩이 초기화되는 순간이지.
- Form.Load: 주 폼의 초기화 작업이 여기서 이뤄져.
- Control.VisibleChanged: 폼이 드디어 보이게 돼! (오, 이제 시작인가?)
- Form.Activated: 폼이 활성화돼서 사용자가 뭘 할 준비가 돼.
- Form.Shown: 폼이 화면에 뜬 직후 발생하는 이벤트야. 이제 진짜 보이는 거지!
이때 Application.Run() 메서드는 전달된 Form 객체를 인스턴스화하고, 윈도우 메시지 루프를 돌려. 루프가 돌면서 폼이 완전하게 실행되는 거야. 참고로 Visible
속성이 기본적으로 true
라서 Show()
를 굳이 호출 안 해도 폼이 화면에 보여.
폼 종료 시 이벤트 순서
이제 애플리케이션을 종료할 때는 다음 순서로 이벤트들이 발생해:
- Form.Closing: 폼이 닫히기 직전!
- Form.FormClosing: 사용자가 폼을 닫으려 할 때 발생해. 여기서 정말 닫을지 취소할지 결정할 수도 있어.
- Form.Closed: 폼이 닫히고 나서 발생하는 이벤트야.
- Form.FormClosed: 폼이 완전히 종료된 후 발생해.
- Form.Deactivate: 폼이 더 이상 활성 상태가 아니게 돼.
팁:
Closing
이벤트는 폼 닫기 직전이라, “변경 사항을 저장하시겠습니까?” 같은 알림을 띄우기 좋아. 반면,Closed
는 폼이 완전히 닫힌 후라서 자원을 해제하거나 다른 정리 작업을 할 때 쓰면 딱이야.
Form.Load vs Form.Shown
폼의 Load랑 Shown 이벤트가 비슷해 보일 수도 있지만 차이가 있어.
Load: 폼이 UI로 뜨기 전에 발생하는 이벤트라서, 이때 무거운 초기화 작업을 하면 폼이 천천히 뜨는 것처럼 보여. 속도가 느린 것처럼 느껴지기도 하지.
Shown: 폼이 화면에 나타난 직후 발생하는 이벤트야. 폼이 일단 보이고 나서 작업이 시작되니까, 초기화가 오래 걸려도 프로그램이 멈춘 것처럼 안 보여.
팁: 시간이 오래 걸리는 초기화 작업은
Shown
에 넣어봐. 폼이 먼저 뜨고 작업이 되니까 훨씬 자연스러워 보여!
Form.Closing vs Form.Closed
Closing과 Closed 이벤트도 미묘하게 다르다구!
Closing: 폼이 닫히기 직전에 발생해. 닫기 전에 “저장할래?” 같은 대화 상자를 띄울 때 쓰기 좋아. 이 이벤트에서
Cancel
을 걸면 닫기를 취소할 수도 있어.Closed: 폼이 완전히 닫힌 후 발생해. 이미 폼이 종료된 후에 자원을 해제하거나 다른 정리 작업을 하는 데 유용해.
이렇게 시작과 종료 시 일어나는 이벤트들을 잘 활용하면 사용자 입장에서 더 편리한 애플리케이션을 만들 수 있어! 특히 Load
랑 Shown
의 활용만 잘해도 프로그램이 빨리 뜨는 것 같은 느낌을 줄 수 있지. 윈도우 폼 개발할 때 이벤트 하나하나 챙기는 게 귀찮아 보일 수 있지만, 막상 적용하면 사용자 경험에 차이가 나니까 잘 활용해 보자!