PL/SQL - 함수: 초보자 가이드

안녕하세요, 꿈나무 프로그래머 여러분! 오늘 우리는 PL/SQL 함수의 세계로 흥미로운 여정을 떠납니다. 코드를 한 줄도 작성해 본 적이 없으신 분들도 걱정 마세요 - 저는 여러분의 친절한 안내자가 되어, 단계별로 함께 진행할 것입니다. 이 튜토리얼의 끝을 맺을 때, 여러분은 프로처럼 함수를 생성하고 호출할 수 있을 것입니다!

PL/SQL - Functions

PL/SQL 함수는 무엇인가요?

들어가기 전에, 함수가 무엇인지 이해해 보겠습니다. 함수를 코드 속의 작은 도우미라고 생각해 보세요. 주요 프로그램 내부의 미니 프로그램처럼 특정 작업을 수행합니다. 여러분이 정보를 주면 (입력 또는 매개변수라고 부릅니다), 그 정보를 바탕으로 작업을 수행하고 결과를 돌려줍니다.

예를 들어, 원의 면적을 계산할 수 있는 로봇 어시스턴트(이를 FunctionBot이라고 부를게요)를 상상해 봅시다. FunctionBot에게 원의 반지름을 말하면, 그는 빠르게 계산을 하고 면적을 알려줍니다. 이것이 프로그래밍에서 함수가 하는 일입니다!

함수 생성하기

이제 PL/SQL에서 우리 자신의 함수를 만들어 보겠습니다. 기본 구조는 다음과 같습니다:

CREATE [OR REPLACE] FUNCTION function_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
RETURN return_datatype
IS
-- 선언 부분
BEGIN
-- 실행 부분
RETURN (value);
END;
/

이것이 무서워하지 마세요! 단계별로 설명해 보겠습니다:

  1. CREATE [OR REPLACE] FUNCTION: 이는 Oracle에게 새로운 함수를 생성하거나(또는 기존의 함수를 대체하거나) 알립니다.
  2. function_name: 우리가 함수에 부여할 이름입니다.
  3. (parameter_name [IN | OUT | IN OUT] type [, ...]): 함수가 받는 입력입니다.
  4. RETURN return_datatype: 함수가 돌려줄 데이터 유형을 지정합니다.
  5. IS: 이 키워드는 함수 헤더와 본문을 구분합니다.
  6. BEGINEND 키워드는 함수의 주요 코드를 감싸います.
  7. RETURN (value): 함수가 돌려줄 값을 지정합니다.

이제 원의 면적을 계산하는 간단한 함수를 만들어 보겠습니다:

CREATE OR REPLACE FUNCTION calculate_circle_area(radius NUMBER)
RETURN NUMBER
IS
pi CONSTANT NUMBER := 3.14159265359;
area NUMBER;
BEGIN
area := pi * radius * radius;
RETURN area;
END;
/

이 함수에서 다음이 일어납니다:

  1. calculate_circle_area라는 이름의 함수를 생성합니다.
  2. 반지름 radius라는 하나의 입력 매개변수를 받습니다.
  3. NUMBER 타입의 값을 돌려줍니다.
  4. 상수 pi를 정의합니다.
  5. 원의 면적을 계산하는 공식을 사용합니다: π * r^2.
  6. 최종 면적을 돌려줍니다.

함수 호출하기

이제 우리가 만든 함수를 어떻게 사용할까요? 이를 "함수 호출"이라고 합니다. PL/SQL에서 함수를 호출하는 여러 가지 방법이 있습니다:

1. SELECT 문에서:

SELECT calculate_circle_area(5) AS circle_area FROM DUAL;

이렇게 하면 반지름이 5인 원의 면적을 돌려줍니다.

2. PL/SQL 블록에서:

DECLARE
result NUMBER;
BEGIN
result := calculate_circle_area(7);
DBMS_OUTPUT.PUT_LINE('원의 면적은: ' || result);
END;
/

이렇게 하면 반지름이 7인 원의 면적을 계산하고 결과를 출력합니다.

3. 더 큰 표현식의 일부로:

DECLARE
radius NUMBER := 10;
diameter NUMBER;
BEGIN
diameter := 2 * radius;
DBMS_OUTPUT.PUT_LINE('지름이 ' || diameter || '인 원의 면적은: ' ||
calculate_circle_area(radius));
END;
/

이렇게 하면 지름을 계산하고 그에 따른 원의 면적을 구합니다.

PL/SQL 재귀 함수

이제 약간 더 고급 내용에 대해 이야기해 보겠습니다: 재귀 함수. 재귀 함수는 자신을 호출하는 함수입니다. 러시아 인형처럼, 하나를 열면 다른 하나가 안에 들어 있죠!

classical example: 수의 계승을 계산하는 함수. 5의 계승(5!라고 쓰입니다)은 5 4 3 2 1 = 120입니다.

계승을 계산하는 재귀 함수를 작성해 보겠습니다:

CREATE OR REPLACE FUNCTION factorial(n NUMBER)
RETURN NUMBER
IS
BEGIN
IF n = 0 OR n = 1 THEN
RETURN 1;
ELSE
RETURN n * factorial(n - 1);
END IF;
END;
/

이를 단계별로 설명해 보겠습니다:

  1. n이 0이나 1이라면 1을 돌려줍니다 (이는 우리의 기본 사례입니다).
  2. 그렇지 않으면 n을 (n-1)의 계승과 곱합니다.
  3. 이 함수는 자신을 호출하여 더 작은 수로 점진적으로 줄어듭니다.

이 함수를 사용하려면 다음과 같이 합니다:

BEGIN
DBMS_OUTPUT.PUT_LINE('5의 계승은: ' || factorial(5));
END;
/

이렇게 하면 "5의 계승은: 120"를 출력합니다.

일반 PL/SQL 함수 메서드

PL/SQL 함수에서 사용되는 일반 메서드를 아래 표에 정리했습니다:

메서드 설명 예제
CREATE FUNCTION 새로운 함수 생성 CREATE FUNCTION my_func...
REPLACE FUNCTION 기존 함수 대체 CREATE OR REPLACE FUNCTION my_func...
RETURN 반환 타입과 값 지정 RETURN NUMBER; ... RETURN result;
CALL 함수 호출 SELECT my_func(5) FROM DUAL;
DROP FUNCTION 함수 제거 DROP FUNCTION my_func;
EXECUTE 함수 실행 EXECUTE my_func(10);

기억하시기 바랍니다, 연습이 완벽을 만듭니다! 이 함수들을 실험해 보세요. 입력을 바꿔보거나, 함수들을 결합하거나, 자신만의 독특한 함수를 만들어 보세요. 이를 통해 더 잘 이해할 수 있을 것입니다.

그리고 여기서 끝입니다! PL/SQL 함수의 세계로 첫 걸음을 뗐습니다. 간단한 계산기에서 재귀 문제 해결자까지, 함수는 코드를 효율적이고 쉽게 관리하는 강력한 도구입니다. 계속 탐구하고, 코딩하고, 가장 중요한 것은 즐겁게 만들어 보세요!

Credits: Image by storyset