Skip to content
This repository has been archived by the owner on Apr 25, 2020. It is now read-only.

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

현대고 학생들과 함께하는 PHP 수업 3차시

###어떤 것들이 있어야 할까? - 2 (제어문) + 번외

개요

수업자료는 Slide Share에 업로드 되어져 있습니다.

3차시에서는 제어문에 대한 설명과 실습. 그리고 PHP 에 대한 실제 설정을 주로 해볼 예정입니다.

실습

반복문/제어문 실습에 관한 답안은 같이 업로드를 해놓았다. 주석도 같이 있으니 참고하기 바란다.

제어문

제어문은 정말 많이 쓰인다. 그래서 먼저 제대로 된 시작전에 짚고 넘어간 부분이고, 나름 중요하게 언급을 했다. 조건문(분기문)과 반복문이 있는데, 조건문과 반복문은 연습을 통해 많이 익혀야 한다.

foreach

강의중에 foreach 에 관해서 건너뛰게 되었는데, foreach 가 되게 유용하게 쓰이는 상황이 많을 것이다. for, while 에 관해서 우리는 배웠었다. do while 문도 있고, 더 여러가지가 있는데 적게 배워도 많은 곳에 쓸 수 있게 하기 위해서 for, while, if else 세 개를 가르쳐 준 것이다. 분명히 더 제대로 배우고 싶은 사람도 있을 것이라 생각하고 여기에 추가적으로 언급을 한다.

foreach 는 인덱스 없이 배열(변수들을 여러개 모아놓은 것을 의미한다.)을 하나씩 받아와서 실행하는 반복문이다. 인덱스를 따로 쓰지 않고도 사용할 수 있다는 점에 대해서 큰 이득이 있다.

자세한 설명은 php.net에 잘 설명되어 있으므로, php.net을 참고하기 바란다.

switch case

이 역시 if 만큼은 아니지만 조건문 중에서 상당히 많이 쓰이는 조건문 중 하나다. 하지만 if 로 대부분 대체가 가능하기에 빠르게 교육하기 위해서 건너 뛴 부분이다. 역시 설명과 예제는 php.net에 잘 나와있으므로 생략한다.

증감연산자에 대하여

증감연산자는 반복문에서 많이 볼 수 있는 문법이다. 많은 언어에서 지원을 하고, 유용하게 쓰이는 만큼, 개발을 하려면 꼭 짚어주어야 하는 부분이라고 할 수 있는데, 쓰는 방법은 -- ++를 변수 앞 뒤로 붙여주면 된다. 앞에 붙이는 증감연산자는 전위 증감 연산자. 뒤에 붙이는 증감연산자는 후위 증감 연산자 라고 하는데, 뒤의 예제를 보자.

<?php
$variable = 10;
$variable2 = 10;
echo ++$variable."\n";
echo $variable2++."\n";
?>

이 예제들을 보면 두가지의 차이점을 명확히 알 수 있을 것이다. 결과값은

11 10

인데, 먼저 하나하나 세부적으로 풀어보자.

전위 증감 연산자

전위는 statement 가 실행이 되기 전에 먼저 연산이 된다. 그러니까

echo ++$variable."\n";

같은 경우에는 variable 이 먼저 한번 더해지고 나서 출력이 된다는 소리다. 앞에 붙여주면 이런 특징이 있다.

후위 증감 연산자

후위는 statement 가 실행이 되고 나서 연산이 된다. 그 경우는

echo $variable2++."\n";

이 문장이 실행되는 과정은 다음과 같다.

  1. $variable."\n"; 를 출력한다.
  2. variable 변수를 1 더해준다.

비교 연산자

수업에서 초과, 미만, 이상, 이하에 대해서 교육을 했었다. 그러나 그 외에도 다양한 방법의 비교연산자를 지원하고 있다. 같은 것, 같지 않은 것, 변수의 타입 비교 등등의 연산자를 지원하고 있고, 그러한 비교연산자는 php.net 비교연산자에서 쉽게 알 수 있다.

+ 추가1 PHP Windows 중 Non Thread Safe 와 Thread Safe 버전 차이점

먼저, Thread Safe 버전은 Apache 모듈이고, Non Thread Safe 버전은 php 독립모듈으로 생각하시면 편합니다.

자세히 설명을 하기 위해서 윈도우에 대한 설명부터 들어가보면 윈도우는 멀티쓰레드방식입니다. (그에 반해 유닉스/리눅스는 태스크개념을 채택하고 있죠.) 반면, PHP는 멀티 프로세스 방식입니다. 유닉스/리눅스 계열에 적합하죠. 그래서 그런 PHP 를 윈도우로 포팅하는 과정에서 멀티 쓰레드 방식으로 개발을 했는데, PHP 모듈들은 멀티 프로세스 방식입니다. 그래서 자주 다운되는 현상들이 일어났고, 안정적으로 사용하기 위해서 퍼포먼스를 일정 부분 포기하더라도 Thread Safe 한 버전을 만들어내게 되었습니다. 그래서 안정적이나, 약간 퍼포먼스가 너무 떨어집니다.

그리고 멀티쓰레드 방식으로 개발하면서 하나 더 문제인 것은 PHP 는 서드파티 프로그램이라는 것입니다. 문제는 "다운이 되면 다운이 덜 되게 하면 되는데, 왜 Thread Safe 하게 만들었냐." 라는 건데, 왜냐면 PHP 는 서드파티라서 안정성이 핵심입니다. 특정 프레임워크 위에서 돌아가는 서드파티 라이브러리라서, 완전히 나뉘어진 쓰레드로 실행이 되어야 안정적이게 되는데, 그게 Thread Safe 방식입니다.

근데 퍼포먼스 문제가 너무 부각되고, 꼭 특정 프레임워크 위에서 돌아갈 필요도 없어지고(로컬에서 tcp 통신으로 모듈을 돌림) 그래서 thread safe 방식에서 탈출하게 됩니다. 그게 non thread safe 방식이고 nginx 와 연동시킬 때 흔히들 사용하실 것입니다.

요점정리를 하자면, 특정 프레임워크 위에서 서드파티로 돌아갈 필요가 있다면 Thread Safe, 로컬에서 자신의 메모리 위에서(php 만의) 돌아간다면 non thread safe 버전을 받으시면 됩니다.