웹마스터 팁

이야~~ 벌써 7강까지 왔습니다. 조회수도 꽤 높아서 감격하고 있습니다. ㅠ_ㅠ
다행히 아직까지는 욕하시는 분이 없네요. -_-;; 강좌라고는 하지만 말주변도 없고 해서 한다고 하는데, 좀 잘 안되더라구요. ^^;; 생각난김에 전에 올렸던 강좌들까지 좀 보기 편하게 정리해봤습니다.  보기 좋은 강좌가 공부하기도 좋다는... 쿨럭~

이번에 배울 부분은 제어문과 함수 부분입니다. 기초편의 마지막이기도 하죠. +_+
다음 강좌 예정 주제는 우선은 시간을 다루는 법을 익혀보도록 하구요, 그 다음에는 말도 많고 탈도 많지만 너무나도 강력한... 정/규/식 에 대해서 해보겠습니다. 기대되죠? ^^;;

제어문이라 함은 말 그대로 구문을 제어하는 겁니다. 차근차근 살펴보겠습니다.

1. if ... else ... elseif
전부 똑같은 것이니까 한번에 몰아서 합니다. if... 영어의 의미로는 "만약 ~~한다면"의 뜻입니다. 프로그래밍 언어에서도 마찬가지로 다음과 같이 사용합니다.

if(조건문1){
 실행문1
}elseif(조건문2){
 실행문2
}else{
 실행문3
}


일단 구조는 간단합니다. 여기에서 저 조건문!! 저것이 바로 저번 강의에서 배웠던 연산자, 그 중에서도 비교 연산자라는 넘과 아주 깊은 관련이 있습니다. elseif 는 처음의 if문을 만족하지 못했을 때 저기로 넘어오고 elseif의 조건도 맞지 않으면 else로 내려옵니다. elseif 는 없을 수도, 여러개가 될 수도 있으며 반드시 if 다음에 위치해야 합니다. else는 단 한개의 사용만 가능하며 없을 수도 있습니다. 때때로 if문에 아무런 비교없이 if($true) 와 같이 쓰는 경우도 있는데, 이 경우 $true 가 NULL(아무 것도 없는 無) 값이거나 숫자 0이 아니라면 항상 참입니다. 따라서 if 다음에 오는 실행문을 실행하죠.

문제. 변수 $a 에 임의의 숫자를 집어넣고 이것이 5와 같으면 Equal 을, 5보다 크면 Big을, 5보다 작으면 Small을 출력하는 프로그램을 작성하라.

저 정도만 하면 if 문에 대한 이해는 충분할 겁니다. 혹시 모르시겠더라도... -_-;; 다른 분의 강좌에도 많은 것이니 그것을 보시고... 혼자 공부하기에서는 다른 데서는 지나치기 쉽거나 잘 안가르쳐주는 부분을 알고 갑시다.
저번에 배웠던 비교연산자 중에 if문의 기능을 하는 연산자가 있었는데 기억을 하시려는지...? 네, 바로 ?: 연산자 였습니다. 만약 $a의 값이 3보다 크면 Big을 그렇지 않으면 Not Big 을 $str 에 입력하여 $str 을 출력하는 프로그램을 작성한다고 하면...

<?php
$a = 3;
$str = ($a > 3)?"Big":"Not Big";
echo $str;
?>

처럼 됩니다. 물론, echo ($a >3)"Big":"Not Big"; 과 같은 식의 사용도 가능합니다.

if 문의 또 다른 사용법으로는... ASP 스타일의 코딩방법으로 다음과 같은 사용법이 있습니다.

if(조건문1): // 콜론(:) 입니다.
 실행문1
elseif(조건문2):
 실행문2
else:
 실행문3
endif;

이 방법은 주로 순수하게 PHP 코드를 작성할 때 보다 HTML 코드 내에서 PHP를 사용하는 경우에 많이 쓰입니다. 중괄호({) 보다 보기 편해서죠. 다음의 예를 보시면 아실겁니다. 만약 이해가 잘 가지 않으신다면 직접 작성해서 해보시기를 권장합니다.

<html>
<body>
<?php if($a > 3):?>
Big
<?php else:?>
Not Big
<?php endif ?>

</html>



2. switch
스위치도 조건문인데, 흔히 조건문이라기 보다는 분기문이라고 많이 부르더군요. 어떤 경우에 쓰느냐 하면... 예를 들어서 0부터 9까지 입력된 숫자에 따라서 각각 다른 일을 하도록 프로그램을 만들일이 있다고 가정해보죠. 그럴 경우 여태까지 배운 걸로만 하려면...

if($num == 0){
 실행문1
}elseif($num == 1){
 실행문2
}elseif($num == 2){
 실행문3
} 이하 생략


엄청난 elseif 문을 보게 될 것입니다. 이런건 세련되 보이지도 않고 정말정말 무식해 보일뿐이죠. -_-;;
이 경우 코드를 조금이라도 간단하게 하기 위해서 switch 문이 존재합니다.

switch(변수){
 case 0:
   실행문1
   break;
 case 1:
   실행문2
   break;

....이하 생략
}

중요한 것은 각각의 분기가 끝나는 지점에 반드시 break; 을 심어줘야 한다는 것입니다. 그렇지 않을 경우에는... case 0 에서 실행되었던 것이 그 아래쪽까지 주우우우우욱~ 코드가 계속 됩니다. =_=;; 말 그대로 개판이 되는거죠.
switch 문도 위의 if 문과 같이 다음과 같은 방법으로 사용할 수 있습니다.

switch(변수):
...중간생략...
endswitch;


3. while 과 do...while
while 문은 조건만 만족시켜준다면 누가 안말리는 이상 계속 굴러가는 반복문입니다. 재수없으면 무한반복의 늪에 빠져버릴 수도 있을만큼 충분히 강력하고 위험한 제어문이죠. 사용은 다음과 같이 합니다.

while(조건문){
 실행문
}

조건문이 참(true)이면 while은 계속 돌아갑니다. 조건문은 if에서와 마찬가지로 구문일 수도 있고 딸랑 변수하나만 놓을 수도 있습니다만... 무한반복이 되지 않도록 주의해줘야 합니다. while문도 if문과 마찬가지로..

while(조건문):
 실행문
endwhile;

위와 같은 사용이 가능합니다.

do...while문은 while 문과 비슷하지만 while에 들어가기 전에 먼저 실행문을 한번 실행시킨다음 조건을 따져봅니다. 예를 들어 while문은 조건문이 거짓이라면 실행문을 아예 실행해보지도 않지만 do...while문은 일단 한번 실행한 후에 조건문을 따져봅니다. 즉, 최소한 한번은 실행된다는 것이죠.

do {
 실행문
} while(조건문);

do...while문은 ASP 스타일의 사용이 불가능합니다. ^^;;


4. for
for문의 문법은 다음과 같습니다.

for(초기화문; 조건문; 반복실행문){
 실행문
}

실행순서는 먼저 초기화문을 실행시킨다음, 조건문에 맞는지 살펴보고, 조건문에 맞으면 실행문을 실행시킨 후 반복실행문도 실행시켜주고 그 다음부터는 초기화문을 제외한 나머지 과정을 반복합니다. for문도 위에서와 마찬가지로 for ... endfor; 의 사용이 가능합니다. 매뉴얼에 나타난 예제를 보시면 이런 식의 사용도 가능하다는 것을 알 수 있을 겁니다.

// 예제1 : 보통의 사용
for ($i = 1; $i <= 10; $i++) {
    print $i;
}

// 예제2 : break문을 쓰면 반복제어문을 중단함. for에 조건문이 없으므로 무한 반복...될 뻔했지만 break 으로 빠져나옴
for ($i = 1;;$i++) {
    if ($i > 10) {
        break;
    }
    print $i;
}

// 예제3 : 초기화문을 밖으로 빼내고 반복실행문을 for안쪽에 넣었음. 이렇게 하면 while 과 같은 효과.
$i = 1;
for (;;) {
    if ($i > 10) {
        break;
    }
    print $i;
    $i++;
}

// 예제4 : 위 예제들에서 print $i 도 반복되므로 반복실행문 안에 아예 넣었음. 두가지를 한꺼번에 실행하므로 컴마(,)로 연결
for ($i = 1; $i <= 10; print $i, $i++);



5. foreach
foreach 문은 배열에 있는 각 값들을 다룰때 쓴다. 흔히 배열에 저장되어있는 값을 뽑아낼때는... for문 전에 배열의 크기를 구해서 숫자를 더해주는 방식을 많이 썼지만.. foreach문을 사용하면 알아서 배열에 있는 모든 값들을 뽑아준다.

foreach($array as $key => $value){
 실행문
}


예를 들어, $array 라는 배열에
키 "a" : 값 "apple"
키 "b" : 값 "banana"
키 "c" : 값 "cherry"

라는 값들이 있다고 가정했을 때, 각각의 foreach문으로는...
foreach($array as $key => $value){
 echo "키 ".$key." : 값 ".$value;
}

와 같이 사용할 수 있습니다. 어떤 식으로 사용하는 것인지는 나중에 차차 익혀가도록 할테니까 너무 심각하게 외우려고 하지 않으셔도 됩니다.


6. break
break은 위에서도 잠시 보셨을 겁니다.
주로 반복문 while, for 문 같은 곳에 쓰이는데 반복문을 끝까지 실행하지 않고 중간에 중단시킬때 사용합니다. 예를 들어, 한 학급 학생의 이름을 모조리 담은 배열이 있다고 했을 때 "고니"라는 이름을 가진 학생을 찾기 위해 for문이나 foreach 문을 사용해서 계속 비교를 하고 있다고 가정해봅시다. 그럴 경우에는 다음과 같이 소스를 작성할 수 있습니다.

foreach($class as $num => $name){
 if($name == "고니"){
        echo $name;
        break;
 }
}

즉, 위의 소스는 "고니"라는 이름을 가진 학생을 찾으면 이름을 출력하고 반복문을 중단시킵니다. 한 한급에 여러명이 있다면 모르지만 단 한명뿐인 그 사람을 찾은 후에도 계속 반복문을 실행할 이유는 없으니까요 ^^


7. continue
이것도 역시 반복문에서 쓰이지만 break 이랑은 용도가 좀 다릅니다. break이 중단의 의미라면 continue 는 말 그대로 계속의 의미이니까요. break은 break이 호출된 시점에서 현재의 반복문을 종료하게 되지만, continue는 현재의 반복 상태만을 종료하게 됩니다. 다음의 소스를 보면서 설명을 드리도록 하겠습니다.

<?php
for($i = 1; $i <= 10; $i++){
 if($i == 5) continue;
 echo $i."
";
}
?>

위의 소스를 실행시켜 보시면, 1부터 10까지 숫자가 출력되지만 5는 출력이 되지 않습니다. 이유는 3번째 줄의 if($i == 5) continue; 이 부분 때문인데 해석을 하게 되면 다음과 같이 해석할 수 있습니다.

"만약 $i의 값이 5라면 현재의 반복을 중단하고 다음 순서로 넘어가라"

는 것입니다. 즉, 반복문 자체의 완전 종료가 아니라 현재 순서의 반복만 중단하고 다음으로 넘어가는 것이죠. 이렇게 말로만 설명해서는 감이 잘 안오실 겁니다. 역시 이런게 있었다...하는 것만 알아두시면 응용하면서 천천히 익히시면 됩니다. 한번에 머리에 너무 많이 넣으려고 고생안하셔도 된다는 거죠~ ^^(나만 그랬나... -_-;;)

8. 함수의 구조와 return
원래는 return 만 하려고 했는데 함수의 구조까지 한번에 짚고 넘어가야 할 것 같아서 짚고 넘어갑니다. 함수의 구조는 다음과 같이 표시됩니다.

function 함수명(전달변수){
 실행문
}

간단하죠? 만약 전달변수가 여러개라면?

function 함수명(전달변수1, 전달변수2, 전달변수3...)

이런 식으로 할 수 있습니다. 실제로 적용되는 한 예를 보여드리자면 다음과 같습니다.

<?php
print_This("고니","email@mail.com");

function print_This($name, $email){
 echo "제 이름은 ".$name."입니다. E-Mail 주소는 ".$email." 입니다." ;
}
?>

저보다 머리가 좋으실테니 이 정도로도 대강 이해가 되실 겁니다. 그냥 구조만 대강 알기 위한 것이니 깊은 의미따위는 찾지 마세요. ^^;; 또 하나의 제어문 격으로는 return 이 있습니다. return 은 return 뒷부분에 오는 값을 반환하고, 함수 자체를 종료시켜버립니다. 만약 return 을 쓰는 곳이 함수가 아니라 전체적인 프로그램의 영역이라면 프로그램 전체를 종료시켜 버리게 됩니다.

<?php
return 0;
echo "Test is test.";
?>

실행해보시면 아시겠죠? 원래는 값을 반환하는 용도로 쓰이지만 때때로 함수 자체를 완전히 종료시켜버리는 용도로도 쓰입니다. 다음 예제를 보면 값을 반환한다는 의미를 알 수 있습니다.

<?php
$str = print_This("고니","email@mail.com");
echo $str;

function print_This($name, $email){
 $value = "제 이름은 ".$name."입니다. E-Mail 주소는 ".$email." 입니다.";
 return $value;
}
?>

return 을 하게 되면 값을 반환하고 그 시점에서 함수자체는 완전히 종료가 되어버리는 것이죠. 즉, print_This라는 함수를 실행해서 $str 에 반환된 값을 저장시키게 되는 것입니다. 머리 아프면 굳이 이해하려고 애쓰시지 않아도 상관없지만, 이 부분을 나중에라도 찾을 수 있도록 해두는 것이 좋습니다. ^^



이렇게 7강도 끝났습니다. 다음 시간에 할 것은 약속드린대로 시간을 다루는 법입니다. 처음으로 시작하는 응용편이죠. 그 다음에는 정규식에 대해서 할 생각이구요. ^^ 만약 원하시는 강좌가 있으시다면 그 부분에 대해서 다루도록 하겠습니다.