핸들 누수(Handle leak)는 컴퓨터 프로그램자원에게 핸들을 요구하지만, 더 이상 사용되지 않는 핸들을 놓아주지 않을 때 발생하는 소프트웨어 버그의 한 종류이다. 만약 이것이 특정한 기간 동안 자주 또는 반복적으로 일어나는 경우 다수의 핸들들이 사용 중으로 표시되고 사용될 수 없게 되며 결국 성능 문제나 충돌을 일으킨다.

이 용어는 메모리 누수에서 파생되었다. 핸들 누수는 자원 누수의 특정한 예시이다.

원인 편집

핸들 누수의 원인 중 하나는 프로그래머가 카운트나 복사 또는 다른 연산들이 실제로 수행되는지에 대한 이해 없이 실수로, 개체에서 핸들을 가져오는 것이 단지 관리되지 않은 참조를 획득하는 것이라고 여기는 것이다. 다른 원인은 프로그래머들이 언제 예외가 발생하고 서브루틴이 조기에 종료되는지에(루틴의 끝에 있는 클린업 코드가 실행되지 않게 되는) 대해 고려하지 않을 때의 조잡한 예외 처리 디자인 패턴들 때문이다.

예를 들면 디스플레이 디바이스에 대한 핸들을 가져오는 것이 있다. 프로그래머들은 이 핸들을 몇몇 속성들을 검사하는데(예를 들면 지원되는 솔루션들을 질의하는 것 같이) 사용하고, 그 후 그냥 핸들을 놓지 않고 진행한다. 만약 핸들이 단지 추가적인 관리 없이 어떤 데이터 구조체의 포인터라면 핸들을 스코프 밖으로 전달하는 것이 큰 문제는 아닐 것이다. 하지만 많은 경우에 이런 핸들들은 만드시 명시적으로 닫히거나 그것과 연관된 리소스들의 누수를 피하기 위해 릴리즈되어야 한다; 핸들로 무엇을 반드시 해야 하는지에 대한 정확한 요구 사항들은 인터페이스에 따라 다르다.