포럼
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
킴스큐Rb 표준 코딩규칙
2011.05.22 01:00
댓글 8
-
디제이쿠
2011.05.22 09:29
기본 -
guny
2011.05.22 10:10
필요없음... -
銀童
2011.05.22 10:36
저것의 내용에는 이견이 있을수 있습니다.
일단 php 속도 최적화, 라고 널리 알려져있는 내용이긴한데
XE 는 sprintf() 를 사용하는데 이게 상대적으로, '' 이 느리긴 한데
$buff .= sprintf('$output->column_type["%s"] = "%s";%s'"%s"] = "%s";%s', $v->attrs->name, $v->attrs->type, "\n");
의 경우
저기 코딩 규칙대로라면
$buff .= '$output->column_type[\"'.$v->atts->name.'\"] = \"'.$v->attrs->type.'\";\n';
이 되는데 코드의 가독성 측면과 익숙한 상황에 따라서 충분히 선택해서 사용할수 있는 범주입니다.
속도 향상의 측면과 코딩의 가독성을 생각할때 '' . 으로 연결하는게 반드시 진리라는건 미묘하지요.
-
Hexa
2011.05.23 00:01
음... sprintf함수가 문자열을 콤마(.) 으로 연결하는 방법보다 늦다는 것에 대한 자료를 좀 볼 수 있을까요? 님의 답글을 보고 관련자료를 검색해봐도 잘 찾을 수 없네요. 님의 의견에 딴지를 걸고자 함이 아니라, 이것이 사실이라면 제가 지난 10여년 동안 php를 다루어 오면서 가장 기초적인 것도 모르고 있었다는 생각이 들어서입니다.(제가 문자열을 다룰때 sprintf를 즐겨 쓰는 편입니다) 꼭 좀 부탁드리겠습니다 ^^;;;
그런데, 킴스큐의 코딩규칙설명과 sprintf 함수 이야기는 좀 안맞는 듯 하네요. 킴스큐의 코딩가이드는 곁따옴표내에 php 변수를 그냥 사용해서는 안된다는 말 같습니다^^ -
銀童
2011.05.23 10:30
왜 안맞는 이야기인지 잘 모르겠는데요.
" 과, '를 어떻게 쓰던
"$value 값을 입력받았습니다" 식으로 쓰던.
php 가 정해진 규약에서 크게 속도 문제가 없는선에서 편한대로 쓰면 된다는겁니다.
사실 저런게 속도 차이가 무슨 안드로메다 급으로 나는것도 아니구요.
사실 "$value text"
보다 sprintf('%s text', $value); 가 더 느릴껍니다.
속도 문제보다도 코드의 가독성과, 오류가 벌어질 확률을 고민해서 써야하는거겠지요.
sprintf 가 .보다 느리다는것은
http://judebert.com/progress/archives/204-PHP-String-Formatting-Performance.html
등에서 찾아볼수 있습니다.
조금 된 문서라 최근 php 버전에서 돌려봤는데 (5.3.6)$outstr = 'literal'.$n.$data.$int.$data.$float.$n; 102ms.
$outstr = "literal$n$data$int$data$float$n"; 94ms.
$outstr = <<<EOS literal$n$data$int$data$float$n EOS; 94ms.
$outstr = sprintf('literal%s%s%d%s%f%s', $n, $data, $int, $data, $float, $n); 154ms.
$outstr = sprintf('literal%s%5$s%2$d%3$s%4$f%s', $n, $int, $data, $float, $data, $n); 163ms.Graphical comparisons
Method (100000 repetitions) Percent of time out of max (163 ms) Single quote concat Double quote eval Heredoc eval Simple sprintf() sprintf() with positional params
오히려 double quote 안에 변수를 넣는것이 가장 빠르지요.
물론. 이런 병신같은 가독성을 보이는건 쓰고싶지 않지만.. -
Hexa
2011.05.23 18:16
네 고맙습니다. 덕분에 지나치기 쉬운 문자열 처리 속도에 대한 지식을 하나 얻었네요.
곁따옴표 내에 바로 변수를 쓰는 방식이 가장 속도가 빠른건 당연한 거 같구요. 홑따옴표로 붙일 때는 메모리를 계속 할당해야 하기 때문에 퍼포먼스가 느린건 이해가 갈만 합니다. 마찬가지로 sprintf()를 사용했을 때도 패턴에 대한 검증연산이 일어날테니 미묘한 속도차이가 있겠군요.
제가 문자열을 concat하지 않고 sprintf()를 이용하는 경우는 주로 두가지 이유때문인데요. 하나는 SQL 처리시 1차적인 인젝션 방어를 위한 것이고, 하나는 긴 문장을 생성시 concat을 자주할 수록 메모리 낭비가 심하기 때문입니다. 가독성때문에 sprintf()를 사용하는건 아니구요. 오히려 가독성은 sprintf가 더 나쁠 때도 있습니다.
예제로 보여주신 것도 짧은 문자열에 대해서 테스트 한 듯 하네요. 긴문자열에 대해서도 한번 테스트 해봐야 할 듯 합니다.
좋은 정보 주셔서 감사합니다. -
銀童
2011.05.24 10:10
전 가독성과 코드 유지 보수의 측면에서 sprintf 가 장점이 있다고 생각하는데 이건 호불호가 갈리는 부분이네요.
코드가 길어지면 알아보기도 힘들고, 처리도 힘들잖아요? -
앙까?
2011.05.23 03:20
오~ 새로운 사실을 알았네요 ^^