Knowhow | 변수, 상수, 매개변수, 함수, 프로시저의 명명법
변수, 상수, 매개변수의 이름은 오라클에서 내부적으로 사용하는 예약어와 겹치지 않는 한 자유롭게 지을 수 있다. 하지만 좀더 의미 있게 이름을 짓는다면 프로그램의 가독성을 높일 수 있다. 그러면 어떤 식으로 이름을 지어야 할까?
“이렇게 지어야 한다”라는 규칙은 없다. 프로젝트나 개발자에 따라 나름 규칙을 정하기도 하지만, 필자 경험으로 보면 이런 명명법 규칙들은 초반에는 잘 지켜 지지만 시간이 갈수록 그렇지 않을 때가 대부분이었다. 그 이유는 개발해야 할 내용은 많은데 일일이 규칙에 맞게 이름을 짓는 것이 번거롭기도 하고 프로젝트 일정에 맞춰 프로그램 개발하기도 버겁기 때문이다. 또한 명명 규칙 자체가 너무 복잡해서 해당 규칙에 따랐더라도 가독성 향상에 그리 도움이 되지 않기도 한다. 따라서 명명규칙은 되도록이면 간단하게 정하는 것이 좋다. 다음은 필자가 나름대로 정립한 명명법 규칙이다.
변수 |
variable의 맨 앞 글자인 v +데이터 타입의 앞 글자(문자는 s, 숫자는 n, 날짜는 d) + 변수 설명(테이블 컬럼 값을 사용할 때는 컬럼명) |
예) vs_emp_name ,vn_employee_id, vd_hire_date |
|
상수 |
constant의 맨 앞 글자인 c + 나머지는 변수와 동일 |
예) cn_pi (파이 값), cn_inch_to_meter (인치를 미터로 변환하는 상수) |
|
매개변수 |
parameter의 맨 앞 글자인 p + 나머지는 변수와 동일 |
예) pn_employee_id, pn_salary, pd_retire_date |
|
함수 |
get (값을 가져오므로) + 함수 설명 약자 + fn get_dep_name_fn (부서명을 가져오는 함수), get_max_salary_dep_fn (해당 부서에서 가장 높은 급여 값을 가져오는 함수) |
프로시저 |
처리 유형 + 프로시저 설명 약자 + proc |
upd_emp_sal_proc(사원 급여를 갱신하는 프로시저), ins_new_emp_proc(신규 사원을 입력하는 프로시저), iud_dept_proc(부서를 입력, 수정, 삭제하는 프로시저) |
변수, 상수, 매개변수 이름에 접두어(v, c, p)를 붙이는 이유는 명칭만 보더라도 그 성격을 바로 식별할 수 있을 뿐만 아니라 문제가 될 소지가 있는 이름과 구별하기 위해서다. 예를 들어, 사원 테이블에서 사원명(employees.emp_name)을 가져오는 변수를 emp_name 이라고 만들어 버리면, 변수를 선언할 때는 문제가 없지만 DML 문장과 이 변수를 같이 사용할 경우 오라클은 emp_name이 컬럼명인지변수명인지 구별하지 못해 잘못된 연산을 수행하기 때문이다. 예를 들어 보자.
입력
DECLARE
emp_name VARCHAR2(80); -- 변수선언
BEGIN
emp_name := 'hong'; -- 갱신할 값 할당
UPDATE employees
SET emp_name = emp_name -- 위에서 할당한 값으로 갱신하려 했지만, 오라클은 변수가 아닌 컬럼명으로 인지함
WHERE employee_id = 100;
SELECT emp_name
INTO emp_name
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE(emp_name);
END;
결과
Steven King
emp_name이라는 변수에 ‘hong’이란 값을 할당해 100번 사원의 이름을 이 값으로 갱신하려고 했지만, 오라클은 UPDATE문에서 사용한 emp_name을 앞에서 선언한 변수가 아닌 사원 테이블의 컬럼으로 인지하여 UPDATE를 수행했고 최종 결과는 ‘hong’이 아닌 ‘Steven King’이 출력된 것이다.
함수나 프로시저는 접미사로 각각 fn과 proc만 붙이고 나머지는 특별한 제한없이 사용할 때도 많지만, 위에서 설명한 것처럼 좀더 구체적으로 명명하면 그 이름만 보고도 쉽게 어떤 용도로 사용되는 서브 프로그램인지 재빨리 파악할 수 있을 것이다.