사용자 정의 함수
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
사용자 정의 함수는 프로그래밍 언어와 데이터베이스 관리 시스템에서 사용되는 기능으로, 사용자가 직접 정의하여 재사용할 수 있는 코드 블록이다. 프로그래밍 언어에서는 베이직과 코볼 등에서 찾아볼 수 있으며, 데이터베이스에서는 SQL 문의 기능을 확장하기 위해 사용된다. SQL 표준은 스칼라 함수와 테이블 함수를 구분하며, CREATE FUNCTION 문을 사용하여 정의한다. 데이터베이스 시스템에 따라 다양한 유형의 사용자 정의 함수를 지원하며, 마이크로소프트 SQL 서버, 아파치 하이브, 아파치 도리스 등에서 사용자 정의 함수를 활용할 수 있다.
베이직의 초기 구현체는 "DEF FN" 문법으로 사용자 정의 함수를 정의했다.[1] 현대 베이직은 구조화된 프로그래밍 패러다임에 영향을 받아, 코드 대부분을 사용자 정의 함수나 프로시저로 작성한다.[1]
관계형 데이터베이스 관리 시스템에서 사용자 정의 함수는 표준 쿼리 언어(일반적으로 SQL) 문에서 평가할 수 있는 함수를 추가하여 데이터베이스 서버의 기능을 확장하는 메커니즘을 제공한다.
2. 프로그래밍 언어에서의 사용자 정의 함수
2. 1. 베이직 (BASIC)
초기 베이직 언어에서는 `DEF FN` 문법을 사용하여 사용자 정의 함수를 정의했다.[1] 현대의 베이직 언어는 구조적 프로그래밍 패러다임을 따르며, 사용자 정의 함수와 프로시저를 활용하여 코드의 모듈화를 지원한다.[1]
2. 2. 코볼 (COBOL)
COBOL 프로그래밍 언어에서 사용자 정의 함수는 `FUNCTION-ID` 단락을 지정하여 정의한다. 사용자 정의 함수는 프로시저부 헤더의 `RETURNING` 구문을 지정하여 값을 반환하며, 함수 식별자 구문을 사용하여 호출한다. 자세한 내용은 ISO/IEC 1989:2014 프로그래밍 언어 COBOL 표준을 참조해야 한다.
3. 데이터베이스에서의 사용자 정의 함수
SQL 데이터베이스에서 사용자 정의 함수는 SQL 문에서 평가할 수 있는 함수를 추가함으로써 데이터베이스 서버의 기능을 확장하기 위한 장치를 제공한다. SQL에서 사용자 정의 함수는 `CREATE FUNCTION` 문을 사용하여 선언된다.[1]
예를 들어 섭씨를 화씨로 변환하는 사용자 정의 함수는 다음과 같이 선언할 수 있다.
```sql
CREATE FUNCTION dbo.CtoF(Celsius FLOAT)
RETURNS FLOAT
RETURN (Celsius * 1.8) + 32
```
만들어진 사용자 정의 함수는 SQL 문의 식에서 사용될 수 있다. 예를 들어, 다음 쿼리와 같이
```sql
SELECT Name, CtoF(BoilingPoint)
FROM Elements
```
각 줄에서 이름과 끓는점을 가져온다. 열의 값을 화씨의 값으로 변환하기 위해 위에 선언된 CtoF 사용자 정의 함수를 호출한다.
3. 1. SQL 표준
SQL 표준(SQL)은 스칼라 함수와 테이블 함수를 구분한다. 스칼라 함수는 하나의 값 또는 NULL만을 반환하지만, 테이블 함수는 각 줄이 하나 이상의 열로 된, 0개 이상의 열을 이루는 (관계형) 테이블을 반환한다.[1]
SQL에서 사용자 정의 함수는 `CREATE FUNCTION` 문을 사용하여 선언된다.[1] 만들어진 사용자 정의 함수는 SQL 문의 식에서 사용될 수 있다. 예를 들어, SELECT 문에서 다른 대부분의 내장 함수가 허용되는 곳에서 호출할 수 있다. 개념적으로 함수는 이러한 사용법에서 각 행마다 한 번씩 평가된다.[2]
각 사용자 정의 함수는 특정 속성 또는 특성을 가지며, SQL 표준은 다음 속성을 정의한다:[2]
사용자 정의 함수는 저장 프로시저와 혼동해서는 안 된다. 저장 프로시저를 사용하면 사용자가 SQL 명령 집합을 그룹화할 수 있다. 프로시저는 매개변수를 허용하고 해당 매개변수에 따라 SQL 문을 실행할 수 있다. 프로시저는 표현식이 아니므로 사용자 정의 함수처럼 사용할 수 없다.[2]
3. 2. 마이크로소프트 SQL 서버 (Microsoft SQL Server)
마이크로소프트 SQL Server 2000은 스칼라 함수, 인라인 테이블 반환 함수, 다중 문 테이블 반환 함수 등 세 가지 유형의 사용자 정의 함수(UDF)를 지원한다. 사용자 정의 함수는 쿼리에서 내장 함수처럼 호출하거나, `EXECUTE` 문을 통해 실행할 수 있다.
사용자 정의 함수는 코드 재사용을 위한 하나 이상의 Transact-SQL 문으로 구성된 서브루틴이다.[1] 0개 이상의 인수를 사용하고 반환 값을 평가하며, 저장 프로시저와 유사하게 본문에 제어 흐름 문과 DML 문이 모두 있다.[1] 데이터베이스, 파일, 네트워크와 같은 외부 리소스에 대한 수정은 할 수 없다.[1] 출력 매개변수를 지원하지 않으며, 매개변수의 기본값을 전달하려면 `DEFAULT` 키워드를 지정해야 한다.[1] UDF의 오류는 UDF 및 UDF를 호출한 문을 중단시킨다.[1]
3. 2. 1. 지원되는 데이터 형식 (SQL Server 2000)
마이크로소프트 SQL Server 2000에서 사용자 정의 함수(UDF)는 대부분 (table) 형식의 임시 변수와 UDF의 반환 값을 정의하는 데 사용되며, 결과를 저장하는 임시 테이블과 유사하다. 범위는 정의된 함수, 저장 프로시저 또는 배치로 제한된다.[1] (Table) 변수 간 할당 연산은 허용되지 않으며, SELECT, INSERT, UPDATE 및 DELETE 문에서 사용할 수 있다.[1]
3. 2. 2. 함수 생성, 변경, 제거
SQL에서 사용자 정의 함수(UDF)는 `CREATE FUNCTION` 문을 사용하여 선언한다. 예를 들어, 섭씨를 화씨로 변환하는 함수는 다음과 같이 선언할 수 있다.
```sql
CREATE FUNCTION dbo.CtoF(Celsius FLOAT)
RETURNS FLOAT
RETURN (Celsius * 1.8) + 32
```
마이크로소프트 SQL Server 2000에는 스칼라 함수, 인라인 테이블 반환 함수, 다중 문 테이블 반환 함수, 이렇게 세 가지 유형의 UDF가 있다.
UDF를 생성, 변경 또는 제거하려면 다음과 같은 SQL 문을 사용한다.3. 3. 아파치 하이브 (Apache Hive)
아파치 하이브는 일반 사용자 정의 함수(UDF), 사용자 정의 집계 함수(UDAF), 테이블 생성 함수(UDTF)를 정의한다.[1] 하이브는 개발자가 자바를 사용하여 자체 사용자 정의 함수를 만들 수 있도록 지원한다.[2]
3. 4. 아파치 도리스 (Apache Doris)
오픈 소스 실시간 분석 데이터베이스인 아파치 도리스는 사용자가 C++(프로그래밍 언어)로 작성된 사용자 정의 함수(UDF)를 추가할 수 있도록 지원한다.[3]
참조
[1]
웹사이트
LanguageManual UDF - Apache Hive - Apache Software Foundation
https://cwiki.apache[...]
2015-06-26
[2]
웹사이트
HivePlugins - Apache Hive - Apache Software Foundation
https://cwiki.apache[...]
2015-06-26
[3]
웹사이트
Apache Doris UDF
https://doris.apache[...]
2023-04-08
[4]
웹인용
LanguageManual UDF - Apache Hive - Apache Software Foundation
https://cwiki.apache[...]
2015-06-26
[5]
웹인용
HivePlugins - Apache Hive - Apache Software Foundation
https://cwiki.apache[...]
2015-06-26
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com