QT/Tip / Information
시그널(signals)과 슬롯(slots)
행복하면
2009. 4. 29. 18:34
이 개념은 Qt 프로그래밍에 있어서 매우 중요한 요소입니다.
운영체제인 Windows, MacOS, X-Windows에서의 프로그래밍은 일반적으로
이벤트 또는 메시지 처리를 하는데 이와 동일한 개념이며, 기존의 운영체제보다
이벤트 처리 프로그래밍이나 메시지 처리가 보다 쉽게 사용 가능합니다.
시그널와 슬롯의 개념이 나온 것은 기존의 프로그래밍에서의 이벤트 처리는
콜백 함수(callback function)를 사용해서 많이 했는데, 이것은 함수 등록시 잘못된
인수형을 받도록 해 놓았다든지 하는 실수가 생겼을 때 예상치 못했던 문제를
발생 시키게 됩니다. 그 이유는 컴파일러가 사전에 이런 문제를 막아 줄 수 없기
때문입니다.
그리고 윈도우 프로그래밍 MFC 의 경우 메시지 맵이라는 것을 사용하고,
이벤트를 메시지 라고 부르는데, 이 메시지 맵은 메시지를 처리하기 위해 매크로를
사용하는 방법으로 특정한 메시지를 파생된 클래스의 멤버 함수에 대응시켜서 처리
하는 것인데, 이 역시 데이터 안정성 보장 못합니다.
그래서 이 대안으로 Qt에서는 시그널과 슬롯이란 개념을 내 놓았습니다.
모든 Qt클래스들은 시그널과 슬롯을 가질 수 있으며, 어떠한 위젯이 자신의 내부상태가
변경되었다면 시그널을 발생 시키게 됩니다. 그리고 필요한 곳에서 슬롯으로 시그널을
받으면 됩니다.
운영체제인 Windows, MacOS, X-Windows에서의 프로그래밍은 일반적으로
이벤트 또는 메시지 처리를 하는데 이와 동일한 개념이며, 기존의 운영체제보다
이벤트 처리 프로그래밍이나 메시지 처리가 보다 쉽게 사용 가능합니다.
시그널와 슬롯의 개념이 나온 것은 기존의 프로그래밍에서의 이벤트 처리는
콜백 함수(callback function)를 사용해서 많이 했는데, 이것은 함수 등록시 잘못된
인수형을 받도록 해 놓았다든지 하는 실수가 생겼을 때 예상치 못했던 문제를
발생 시키게 됩니다. 그 이유는 컴파일러가 사전에 이런 문제를 막아 줄 수 없기
때문입니다.
그리고 윈도우 프로그래밍 MFC 의 경우 메시지 맵이라는 것을 사용하고,
이벤트를 메시지 라고 부르는데, 이 메시지 맵은 메시지를 처리하기 위해 매크로를
사용하는 방법으로 특정한 메시지를 파생된 클래스의 멤버 함수에 대응시켜서 처리
하는 것인데, 이 역시 데이터 안정성 보장 못합니다.
그래서 이 대안으로 Qt에서는 시그널과 슬롯이란 개념을 내 놓았습니다.
모든 Qt클래스들은 시그널과 슬롯을 가질 수 있으며, 어떠한 위젯이 자신의 내부상태가
변경되었다면 시그널을 발생 시키게 됩니다. 그리고 필요한 곳에서 슬롯으로 시그널을
받으면 됩니다.