사용자 정의 함수(user-defined function, UDF)는 프로그램이나 소프트웨어 환경에 기본적으로 내장되어 있는 함수(내장 함수)와 달리, 사용자(프로그래머)가 직접 정의하여 사용하는 함수를 의미한다. 프로그래밍에서 함수는 특정 작업을 수행하는 독립적인 코드 블록이며, 사용자 정의 함수는 이러한 함수를 프로그래머가 필요에 따라 직접 설계하고 구현한다는 점에서 내장 함수와 구별된다.
개념 및 목적
사용자 정의 함수의 주된 목적은 코드의 재사용성, 가독성, 유지보수성을 향상시키는 데 있다. 동일한 작업을 여러 번 수행해야 할 경우 해당 작업을 함수로 정의해 두면 필요할 때마다 함수를 호출하여 사용할 수 있으며, 코드의 중복을 줄이고 프로그램을 기능별로 모듈화할 수 있다. 대부분의 프로그래밍 언어는 사용자 정의 함수를 작성할 수 있는 문법과 구조를 제공한다.
프로그래밍 언어에서의 사용
C 언어를 비롯한 많은 절차적 언어에서 사용자 정의 함수는 반환 타입, 함수 이름, 매개변수 목록, 함수 본문으로 구성된다. 함수의 정의, 선언(프로토타입), 호출의 세 단계를 통해 사용된다. C 언어의 경우 표준 라이브러리 함수 외에 사용자가 직접 함수를 정의하여 프로그램의 재사용성과 가독성을 높일 수 있다. Java, Python 등 현대적인 고급 언어에서도 사용자 정의 함수(또는 메서드)는 핵심적인 프로그래밍 요소로 자리잡고 있다.
데이터베이스에서의 사용
SQL 데이터베이스에서 사용자 정의 함수는 데이터베이스 서버의 기능을 확장하기 위한 장치를 제공한다. SQL 표준은 스칼라 함수와 테이블 함수로 구분한다. 스칼라 함수는 하나의 값 또는 NULL을 반환하며, 테이블 함수는 0개 이상의 행으로 구성된 테이블을 반환한다. SQL에서 사용자 정의 함수는 CREATE FUNCTION 문을 사용하여 선언하며, 이후 SQL 문의 식(expression)에서 호출하여 사용할 수 있다. 예를 들어 섭씨를 화씨로 변환하는 함수를 정의한 후 SELECT 문 내에서 열(column) 값에 대해 해당 함수를 적용하는 방식으로 활용된다.
베이직(BASIC) 언어에서의 역사적 사용
베이직 프로그래밍 언어의 일부 초기 구현체에서는 사용자 정의 함수가 DEF FN 문법을 사용하여 정의되었다. 이후 구조화된 프로그래밍 패러다임의 영향을 받은 현대적인 베이직 언어에서는 코드의 대부분이 사용자 정의 함수나 프로시저로 작성되는 방식으로 발전하였다.
아파치 하이브(Apache Hive)에서의 확장
아파치 하이브는 일반 사용자 정의 함수(UDF) 외에도 사용자 정의 집계 함수(UDAF)와 사용자 정의 테이블 생성 함수(UDTF)를 정의할 수 있도록 지원한다. 하이브에서는 개발자가 자바(Java)로 사용자 정의 함수를 작성할 수 있다.
관련 개념
사용자 정의 함수는 프로그래밍 언어의 내장 함수(built-in function) 또는 표준 라이브러리 함수와 대비되는 개념이다. 내장 함수는 언어나 환경에 미리 정의되어 제공되는 반면, 사용자 정의 함수는 프로그래머가 직접 작성하여 프로그램의 특정 요구를 충족시키는 데 사용된다.