요즘 소리바다 웹하드 서비스인 파일바다 개발에 한참 열을 올리고 있습니다. 스토리지 이전 때문에 정신없이 시간 가는줄 모르는데 벌서 4월 중반이 되어 버렸습니다. ^^;
요즘 제가 DEBIAN LINUX에서 CGI 개발 한다고 5년만에 다시 GCC를 이용해 C 프로그램밍을 하는데 참 이거이 .. --; PHP가 참 개발 하기 편하구나라고 새삼 또 느끼게 되었습니다. 이놈의 Pointer와 메모리 선언.. 변수형등.. 그리고 함수라고는 몇개 안되고.. SI업체의 라이브러리를 사용해야 하기 때문에 문자열 함수등은 모두 자체개발을 통해 이용해야 하는데 Path경로 자르기 하나 만드는데 머리 터지는 줄 알았습니다.
기존에 PERL로 만든 FILE SYSTEM CGI만들 때도 궁시렁 궁시렁 했지만 PERL 또한 참으로 발전한 언어라고 생각이 들 정도 C의 보수적인 개발 환경.. LINUX 콘솔에서 MAN PAGE와 VI를 통한 개발은 WINDOG XP 와 EDITPLUS의 단축키에 익숙한 저로선 너무나 힘든 개발이었습니다.
하지만 여기서 중요한 것은 까탈스럽고 건조한 GCC의 환경과 C의 메모리 관리체계야 말로 시스템 개발에 가장 안정적인 환경과 메모리 누수를 막기 위한 가장 엄격하다고 할 수 있을거 같습니다. 사실 PHP로 개발을 하다 보면 에러와 Warring만 안뜨면 그냥 넘어 가지만 사실상 효율적인 코딩 스타일이 아니면 향후 Debuging 할때 많은 시간이 소요 되기 마련입니다. 사실 설계와 코딩 시간은 얼마 되지 않지만 디버깅 할때 아무리 부라우져에 찍어봐도 원인 모를 오류 때문에 시간을 많이 빼긴적이 한두번이 아니거든요...
서론이 너무 길었네요.. 본격적인 남구스의 Coding Style #1
그래서 오늘은 저의 코딩 습관에 대해 말씀 드리고 싶습니다. 제가 표준은 아니지만 나름대로의 철학(?)과 해외 유명한 코더들의 습관을 배울려고 많은 노력해서 오늘 여전히 이런 습관을 가지고 개발을 하고 있습니다. 그 중에 몇가지만 소개 하겠습니다.
IF문 비교
가장 많이 사용하시는 제어문은 IF문이 아닐까 합니다. 하지만 좀더 신경을 쓰면 디버깅 오류의 확율을 줄일 수 있습니다.
ex1)
if ( TRUE === empty($val) ) {
echo '$val의 값이 비어 있습니다';
}
제가 문자열 함수를 자주 사용하는 이유는 리턴값이 TRUE와 FALSE로 표현되는 것이 많은지라 IF문을 사용할 때 자주 이용합니다. 위의 보시면 PHP에서의 비교연산자 '===' 가 나오는데 생소하시는 분들도 계시고 기존의 '=='와 차이가 없을꺼라고 하실지 모르지만 분명한 차이가 있습니다.
'===' 형과 값이 같을 경우 TRUE/FALSE
'==' 값이 같을 경우 TRUE/FALSE
ex2)
$intValue = 1;
if ( '1' === $intValue ) {
echo '$intValue = str 1';
}
if ( 1 === $intValue ) {
echo '$intValue = int 1';
}
if ( 1 == $intValue ) {
echo '$intValue = int 1';
}
if ( '1' == $intValue ) {
echo '$intValue = str 1';
}
//print out
$intValue === int 1
$intValue == int 1
$intValue == str 1
무슨 차이가 있으신지 아시겠죠..? if ( '1' === $intValue ) 부분은 '1'이 int형이 아닌 str형이라서 FALSE라 결국 거짓으로 다음 IF행을 실행하겠죠..? 형선언이 없고 자동 형변환이 PHP의 장점이긴 하나 이런 부분을 이해 없이 개발을 하다보면 어디서 버그가 생겼는지 찾기가 힘듭니다.
그러면 여기서 하나 더 보시죠.. 제가 즐겨 쓰는 변수 비교 형태입니다.
위에 보시다 시피 비교문에서 보통
if ( $intValue == '1' )
이렇게 쓰는게 보편적인것인데..
if ( '1' == $intValue )
라고 쓴 이유는 초보 분들이 간혹 이런 실수를 하시는데 '==' 비교 연산자를 '=' 대입연산자(변수 복사 연산)로 오타를 낼 경우에 값이 바뀌게 되어 버리는 경향이 있습니다.
if ( $intValue = '1' )
그래서 왜 값이 변했는지 찾기가 힘들 경우가 종종 있는데요.. 이럴때 변수 대입을 방지 하기 위해서 상수를 왼쪽에 두개 되면 상수에 변수를 대입을 할 경우 즉,
Parse error: parse error, unexpected '=' in /var/www/Process/namgoos.php on line 66
이라는 에러와 함께 종료 되기 때문에 66째 라인에가서 '=' 로 되어 있는 녀석을 '==' 로 수정 하면 금방 버그를 찾을 수 있겠죠..?
해외 phpFrameWork소스를 분석 중에 클래스와 함께 이런 형태로 많이 구현을 하고 있는 것을 보았습니다. PHP에 적절히 장점과 단점을 함께 활용한 사례라 생각되어 오늘까지 줄기차게 쓰고 있는데 혹시라도 개발자 여러분들 중에서 필요하시다면 이런 습관을 지금부터라도 바꾸신다면 디버깅하는 시간이 다소 줄어들 것이라 생각됩니다.
아니면 말구요..~ :)
'Web Dev > PHP' 카테고리의 다른 글
| swig... (0) | 2007/07/03 |
|---|---|
| 최고의 PHP FRAMEWORK CODE IGNITER (0) | 2007/05/23 |
| PHP에서 XML Parsing 주의 사항 (0) | 2007/05/04 |
| 프로그램 코딩 스타일 이야기 #2 (0) | 2007/05/04 |
| 프로그램 코딩 스타일 이야기 #1 (0) | 2007/05/04 |
| fancyURL로 구글 검색에 잘 걸리게 하는 방법 (3) | 2007/05/04 |

