..

Search

24) 사용자 정의 함수

사용자 정의 함수


사용자 정의 함수(user defined function)

PHP에서는 미리 작성되어 제공되는 많은 내장 함수들이 있습니다.

하지만 개발자가 필요로 하는 기능을 가진 함수가 없다면, 직접 함수를 만들 수도 있습니다.

이런 함수를 사용자 정의 함수라고 하며, 반복해서 수행해야 하는 작업이 있다면 함수로 만들어서 사용하는 것이 좋습니다.


함수의 정의

PHP에서 함수의 정의는 앞서 설명한 함수의 구조대로 정의하면 됩니다.

문법

function 함수이름(매개변수1, 매개변수2,...)

{
    함수가 호출되었을 때 실행될 코드;
}

 

function 키워드로 함수의 정의를 시작하고, 함수의 이름, 매개변수, 블록({ }) 사이에 들어갈 코드를 명시합니다.

 

PHP에서 함수의 이름을 작성할 때는 다음 사항을 준수해야 합니다.

 

1. 함수의 이름은 문자와 숫자, 언더스코어(_)만 사용할 수 있습니다.

2. 함수의 이름은 숫자로 시작할 수 없습니다.

3. 여러 함수가 같은 이름을 사용할 수는 없습니다.

 

PHP는 함수 오버로딩을 지원하지 않으므로, 이미 선언된 함수를 다시 선언할 수 없습니다.

또한, 함수의 이름은 대소문자를 구분하지 않기 때문에 sum()과 SUM()은 같은 함수로 취급됩니다.

 

PHP에서 함수 이름은 대소문자를 구별하지 않지만, 선언한 그대로 호출하는 것이 좋습니다.

 

매개변수는 인수로 전달받은 값을 함수에서 사용하기 위해 사용합니다.

함수는 여러 개의 매개변수를 가질 수 있으며, 쉼표(,)를 사용하여 구분합니다.

 

매개변수에 대한 더 자세한 내용은 PHP 매개변수 수업에서 확인할 수 있습니다.

 

PHP 매개변수 수업 확인=>


함수의 호출

PHP가 미리 정의하여 제공하는 함수는 모든 PHP 스크립트에서 사용할 수 있습니다.

하지만 사용자가 직접 정의한 함수는 해당 함수가 정의된 PHP 스크립트에서만 호출할 수 있습니다.

 

PHP의 모든 함수와 클래스는 전역 범위(global scope)를 가집니다.

따라서 같은 스크립트 내에서는 함수가 내부에서 정의되었더라도 외부에서 호출할 수 있으며, 반대로 외부에서 정의되었어도 내부에서 호출할 수 있습니다.

 

PHP에서 함수의 호출 방법은 함수의 정의와 같은 형태입니다.

예제

$sum = sum(1, 2); // 함수 sum()을 호출하면서, 인수로 1과 2를 전달함.

                  // 함수의 호출이 끝난 뒤에는, 반환값을 변수 $sum에 대입함.

 

위의 예제에서 인수(argument)로 전달된 숫자 1과 2는 함수에서 정의된 매개변수(parameter) x와 y에 각각 대입됩니다.

따라서 호출된 함수의 내부에서는 매개변수 x와 y로 해당 값을 사용할 수 있습니다.


함수의 값 반환

PHP에서 함수는 반환(return)문을 포함할 수도 있고, 포함하지 않을 수도 있습니다.

 

PHP에서 반환문은 return 키워드를 사용하여 명시할 수 있습니다.

이렇게 포함된 반환문은 호출자에게 함수 블록 내에서 실행된 코드의 결과를 반환해 줍니다.

반환문은 배열이나 객체를 포함한 PHP에서 사용할 수 있는 모든 타입의 값을 반환할 수 있습니다.

예제

function sum($x, $y) // 함수의 이름은 sum()이며, 변수 x, y를 매개변수로 가지는 함수를 정의함.

{
    return $x + $y;  // 매개변수 x, y를 더한 값을 반환함.
}
echo sum(1, 2);      // sum() 함수에 숫자 1와 2을 인수로 전달하여 호출함.

코딩연습 ▶

 

PHP 7부터는 함수의 반환값을 원하는 타입으로 반환받을 수 있도록, 반환값의 타입을 직접 지정할 수 있습니다.

 

또한, 반환값의 타입을 지정할 때 그 강도도 설정할 수 있습니다.

기본값인 약한 강도에서는 타입이 일치하지 않으면, 자동 타입 변환을 통해 명시된 타입으로 변환된 반환값을 반환합니다.

하지만 강한 강도에서는 반환값의 타입이 일치하지 않으면, 오류를 발생시킵니다.

 

다음 예제는 약한 강도로 함수의 반환 타입을 설정하는 예제입니다.

예제

function sum($x, $y) : float // 반환값의 타입을 float 타입으로 설정함.

{
    return $x + $y;
}

...

var_dump(sum(+ 4)); // float

 

위의 예제에서 sum() 함수는 호출 시 정수 2개를 인수로 전달받습니다.

하지만 반환 타입이 float 타입으로 설정되어 있으므로, 덧셈 연산의 결과가 int 타입에서 float 타입으로 자동 변환되어 반환됩니다.

 

다음 예제는 강한 강도로 함수의 반환 타입을 설정하는 예제입니다.

예제

declare(strict_types = 1);   // strict 모드로 설정함.

 

function sum($x, $y) : float // 반환값의 타입을 float 타입으로 설정함.

{
    return $x + $y;
}

...

var_dump(sum(+ 4));   // 오류가 발생함.

② var_dump(sum(+ 4.5)); // float

 

위의 예제처럼 declare 문을 사용하여 strict 모드를 설정할 수 있습니다.

PHP 7부터 제공되는 strict 모드는 지금까지의 자동 변환으로 느슨하게 처리되던 타입 검사를 엄격하게 수행하도록 변경합니다.

strict 모드에서는 해당 위치에 나올 수 있는 적절한 타입 이외의 값이 나올 경우 타입 변환을 하지 않고 오류를 발생시킵니다.

 

①번 라인에서 sum() 함수는 호출 시 정수 2개를 인수로 전달받습니다.

하지만 반환 타입이 float 타입으로 설정되어 있으므로, 오류가 발생합니다.

따라서 ②번 라인과 같이 인수 중 하나를 float 타입으로 전달해야만 덧셈 연산의 결과가 반환 타입인 float 타입의 값으로 정상 반환될 것입니다.


연습문제