이번시간에는 함수에 대해 설명하겠습니다.
PHP 5 Functions
수학시간에 함수 많이 사용했어요. ‘y = 2x + 1’ 이런 함수 기억나시죠? 프로그래밍 언어에서도 위와 유사합니다. 프로그래밍 언어에서 더 부각되는 것은 바로 재사용성(Reusability)입니다. 한번 작성한 코드 다시 사용할 수 있으면 좋겠죠?
[PHP] 강좌 #15 함수 및 재귀형 Recursive Function
예를 들어서 5!(팩토리얼)을 계산하는 코드를 작성했어요.
$result = 1;
for ($i = 1; $i <= 5; i++) {
$result = $result * $i;
}
echo $result;
$result = $result * $i;
1 = 1 * 1;
2 = 1 * 2;
6 = 2 * 3;
24 = 6 * 4;
120 = 24 * 5;
[계산 결과]
120
결국 120에는 “120 = 5 * 4 * 3 * 2 * 1”이 들어 있습니다.
PHP 함수 및 재귀형 Recursive Function
이 코드가 매번 나온다면 위 코드를 매번 복사해야 합니다. 게다가 다른 프로그램을 작성한다고 하면 코드를 매일 다른 곳에서 복사해서 붙여넣기 해야 합니다. 매우 귀찮아요. 위 코드를 재활용하고 싶습니다. 그걸 가능하게 해주는 게 함수입니다. 코드를 매번 복사해야하는 불편함을 덜어주는 거죠.
위 코드를 편하게 fact(5); 라고 하면 그 결과 값이 나왔으면 좋겠어요. 위 코드로 함수를 작성하면 아래와 같습니다.
$result = 1;
for ($i = 1; $i <= 5; i++) {
$result = $result * $i;
}
echo $result;
[함수 작성 후 코드]
function fact($n) {
$result = 1;
for ($i = 1; $i <= $n; $i++) {
$result = $result * $i;
}
return $result;
}
echo fact(5);
이제 우리는 fact(5)만 호출하면 그 결과값을 얻을 수 있어요. 매우 편리해졌네요.
function functionName(함수 인지값) {
실행코드;
return 값; // 결과 값을 되돌려줄 때 사용
}
우리가 만든 함수 이름은 fact입니다. 함수 인자값이 하나만 필요해서 함수 인자값 안에 변수 $n 하나만 넣었어요. 2개가 필요하면 인자값 2개를 넣으면 됩니다. 아래 덧셈 코드처럼 $x와 $y를 넣어주면 됩니다. 결과 값이 필요하면 return을 사용하면 됩니다.
$result = $x+$y; return $result;
}
함수를 작성하는데 어렵지 않죠?
수학적 관점에서 보면 fact(n) 함수는 다음과 같습니다.
fact(1)는 1이다.
fact(3) = 3 * fact(2);
fact(2)가 호출되겠죠?
fact(2) = 2 * fact(1); fact(1)이 호출되겠죠?
fact(1) = 1;
fact(1)값 1이 리턴되어서 fact(2) = 2*1 이 되고
fact(2)값 2가 리턴되어 fact(3) = 3*2가 됩니다.
따라서 fact(3)은 6이 됩니다.
위 수학 식을 그대로 표현해서 만들면 다음과 같이 함수를 만들 수 있어요. 매우 간단하죠? 아래와 같은 함수를 재귀형 함수(Recursive Function)라고 부릅니다.
function fact($n) {
if ($n == 1) return 1;
return $n *fact($n-1);
}
위와 같은 방식이 함수형 언어의 기본이 된답니다. for문처럼 반복 작업을 하지 않고 함수를 계속 호출하면서 반복 작업을 합니다. 옛날에는 속도 때문에 수학적 표현 즉 재귀형 함수를 사용할 수 없었습니다. 하지만 요즘은 수학적 표현이 기본이 되는 함수형 언어가 필요한 시대에 살고 있어요.^^
PHP에서는 편리한 개발을 위해 자주 사용하는 함수를 미리 만들어 놓았습니다. 이런 함수를 내장 함수(Built-in Function)라고 부릅니다. 사용자가 직접작성하는 함수는 사용자 함수(User Defined Function) 현재 시간을 알고 싶으면 date() 함수를 사용하면 됩니다.
echo date("h:i:s"); // h:시, i:분 s:초
[출력 결과]
12:27:56
이번 시간 꽤 흥미로운 주제였는데 재미있으셨나요? 다음시간에는 Array 배열을 다루어보도록 하겠습니다. 수고 많으셨어요.^^
'컴퓨터 언어 > PHP' 카테고리의 다른 글
[PHP] 강좌 #16 배열 정렬 함수 Sorting Array (0) | 2015.04.23 |
---|---|
[PHP] 강좌 #15 배열 Array (0) | 2015.04.22 |
[PHP] 강좌 #14 반복문 for문과 foreach문 (1) | 2015.04.20 |
[PHP] 강좌 #13 반복문 while문과 do while문 (1) | 2015.04.19 |
[PHP] 강좌 #12 조건문 switch case문 (2) | 2015.04.18 |