사용자 정의 함수

위키백과, 우리 모두의 백과사전.
둘러보기로 가기 검색하러 가기

사용자 정의 함수(user-defined function, UDF)는 일반적으로는 함수가 기본적으로 프로그램이나 환경 안에 내장되어 있다는 가정 하에 프로그램이나 환경의 사용자가 제공하는 함수이다.

베이직 언어[편집]

베이직 프로그래밍 언어의 일부 오래된 구현체에서 사용자 정의 함수는 "DEF FN" 문법을 사용하여 정의된다. 더 많은 종류의 현대의 베이직은 구조화된 프로그래밍 패러다임에 영향을 받았으며, 여기에서 코드 대부분이 사용자 정의 함수나 프로시저로 작성되어 있고, 이 개념은 실질적으로 과도하게 사용된다.

데이터베이스[편집]

SQL 데이터베이스에서 사용자 정의 함수는 SQL 문에서 평가할 수 있는 함수를 추가함으로써 데이터베이스 서버의 기능을 확장하기 위한 장치를 제공한다. SQL 표준은 스칼라와 테이블 함수를 구별한다. 스칼라 함수는 하나의 값 또는 NULL만을 반환하지만, 테이블 함수는 각 줄이 하나 이상의 열로 된, 0개 이상의 열을 이루는 (관계형) 테이블을 반환한다.

SQL에서 사용자 정의 함수는 CREATE FUNCTION 문을 사용하여 선언된다. 이를테면, 섭씨를 화씨로 변환하는 함수는 다음과 같이 선언할 수 있다:

CREATE FUNCTION dbo.CtoF(Celsius FLOAT)
  RETURNS FLOAT
  RETURN (Celsius * 1.8) + 32

만들어진 사용자 정의 함수는 SQL 문의 식에서 사용될 수 있다. 이 쿼리는

SELECT Name, CtoF(BoilingPoint)
  FROM Elements

각 줄에서 이름과 끓는점을 가져온다. 열의 값을 화씨의 값으로 변환하기 위해 위에 선언된 CtoF 사용자 정의 함수를 호출한다.

SQL 서버 2000[편집]

1. 다음의 MyFunction은 기반이 되는 뷰 MyView 보다 더 빠르게 수행되는 함수 래퍼의 예이다:

CREATE FUNCTION MyFunction()
    RETURNS @Tbl TABLE
    (
        StudentID              VARCHAR(255),
        SAS_StudentInstancesID INT,
        Label                  VARCHAR(255),
        Value                  MONEY,
        CMN_PersonsID          INT
    )
AS
BEGIN
    INSERT @Tbl
    (
        StudentID,
        SAS_StudentInstancesID,
        Label,
        Value,
        CMN_PersonsID
    )
    SELECT
        StudentID,
        SAS_StudentInstancesID,
        Label,
        Value,
        CMN_PersonsID
    FROM MyView -- where MyView selects (with joins) the same columns from large table(s)

    RETURN
END

2. 마이크로소프트 SQL 서버 2005에서 동일 코드 실행의 결과는 정반대이다: 뷰는 함수 래퍼 보다 더 빠르게 실행된다.

CREATE FUNCTION CubicVolume
-- Input dimensions in centimeters
(
    @CubeLength decimal(4,1),
    @CubeWidth  decimal(4,1),
    @CubeHeight decimal(4,1)
)
    RETURNS decimal(12,3)
AS
BEGIN
  RETURN(@CubeLength * @CubeWidth * @CubeHeight)
END

아파치 하이브[편집]

아파치 하이브는 정규 사용자 정의 언어(UDF)뿐 아니라 사용자 정의 집계 함수(UDAF)와 테이블 생성 함수(UDTF)도 정의한다.[1] 하이브는 개발자가 자바로 사용자 정의 함수를 만들 수 있게 한다.[2]

각주[편집]

외부 링크[편집]