psr - code convention

24
PSR Code Convention 조조조 , XE Team

Upload: jhyeon1010

Post on 29-Nov-2014

395 views

Category:

Software


0 download

DESCRIPTION

Code Convention을 위한 PSR에 대한 설명입니다.

TRANSCRIPT

Page 1: PSR - Code Convention

PSRCode Convention

조정현 , XE Team

Page 2: PSR - Code Convention

PSR? Code Convention?

• Code Convention : 프로그램 코드를 작성할때 지켜야 하는 가이드라인

• PSR : Code Convention 룰 중에 하나

Page 3: PSR - Code Convention

이게 무엇인고 하니

코드 작성할때 룰에 맞춰서 해 !!라고 어느정도의 강제를 하는겁니다 ..

Page 4: PSR - Code Convention

왜 ?

개발자가 많은 만큼 코딩 스타일도 다양합니다 .

다들 이런경험 한번씩 있지 않나요 ?

다른사람이 작성한 소스 보고 ..• 보기 불편해 T^T

• 어우 .. 못 알아 보겠어 T^T

• 왜 이렇게 짯데 ? T^T

• 아놔 못해먹네 ㅡㅡ

Page 5: PSR - Code Convention

왜 ?

소스코드가 눈에 익지 않아 불필요하게 소진되는 비용을 최소화 하여 생산성을 높이는데 그 목적이 있다고 할 수 있습니다 .

Page 6: PSR - Code Convention

꼭 지켜야 하나 ? 개개인 별로 진행하는 소규모 프로젝트를 진행하는 개발자들은 필요성을 못 느낄수도 있습니다 .

“ 지금까지 하던대로 익숙한 방식으로 하는게 더 빠른데 ?”

그러나 ! 그 프로젝트를 본인이 죽는 그날까지 맡아서 한다고 보장할 수 있나요 ? 내가 작성한걸 다른사람이 유지보수 할 수도 있고 , 반대로 다른사람이 제작한 프로그램을 내가 유지보수 할 수도 있습니다 .

Page 7: PSR - Code Convention

꼭 지켜야 하나 ?

또한 어느정도 이상 규모의 프로젝트 진행시에는 여러 사람이 협업을 하게 되므로 가독성을 높여 생산성을 증가시키는 행위는 반드시 필요한 부분입니다 .

Page 8: PSR - Code Convention

PSR

• 앞서 말한바와 같이 PSR 은 Code Convention 룰 입니다 .• 여러 프로그래밍 언어중 PHP 에만 적용되는 룰입니다 .• 코딩 가이드만 제시하는 것은 아니고 Auto Loading 과

Log Interface 를 포함하고 있습니다 .• PSR 은 0 부터 4 까지가 존재하며 이중 1, 2 번 내용이

코딩 가이드 라인을 지칭합니다 .

Page 9: PSR - Code Convention

How to

Code Convention 에 해당하는 PSR1, 2 를 집중적으로 살펴보겠습니다 .

Page 10: PSR - Code Convention

How to PSR-1

PSR-1 표준 기본 코딩

요약• PHP 태그는 반드시 <?php 와 <?= 만 사용 함• 파일의 인코딩은 UTF-8 만 사용• 하나의 파일에선 class, function, constant 등을 선언하거나 출력 ,

ini 설정변경 등을 수행하지만 두가지가 동시에 수행되서는 안됨• Class 명은 각 음절의 첫문자를 대문자로 표기• 상수는 대문자와 “ _” 의 조합으로 선언• Method 는 각 음절의 첫문자를 대문자로 표기하지만 첫 문자는 소문자로

표기

Page 11: PSR - Code Convention

How to PSR-1

<?phpini_set(‘error_reporting’, E_ALL);Include ‘filename.php’;echo ‘hello world’;function foo(){

// do something}

class FooClass{ const DOMAIN = ‘www.sample.com’; function barMethod() { // function body }}

Class 가 선언된 파일에서는 이런요소가 같이포함되어 있으면 안됩니다 . 별도 파일에 작성해야합니다 .

파일 시작 태그는 php 문구를 생략하지 않고 작성

닫는 태그는 작성하지 않습니다 .

클래스명은 각 음절 첫글자를 대문자로

상수는 대문자와 “ _” 만 사용

메소드는 각 음절 첫글자를 대문자로 하지만 맨 앞 글자는 소문자

Page 12: PSR - Code Convention

How to PSR-1

기타 사항• Namespace 는 PHP 5.3 이상 버전에서만 사용가능하며 룰은 PSR-0

을 따릅니다 .• 변수명의 형식은 “ $StudlyCaps”, “$camelCase”,

“$under_score” 등의 형식으로 작성할 수 있지만 기준을 정하여 하나의 형식으로 맞춰 써야합니다 . 협업 하시는 분들이 계시다면 상의 하여 결정하면 되겠죠 ?

• http://www.php-fig.org/psr/psr-1/

Page 13: PSR - Code Convention

How to PSR-2

PSR-2 코딩 스타일 가이드

요약• PSR-1 을 기본으로 합니다 .• 들여쓰기는 “탭”을 사용하지 않고 “스페이스” 4 번으로 합니다 .• 한줄의 길이는 80 자 정도로 권장하지만 강제하지는 않습니다 .• namespace 가 선언되었다면 그 다음 줄은 반드시 빈 줄이어야 합니다 .• use 를 사용시에도 마찬가지로 다음 줄은 빈줄이어야 합니다 .• class 와 method 를 여는 중괄호는 해당 이름 다음줄에 위치해야 하고 닫는

중괄호는 내용의 다음 줄에 위치해야합니다 .

Page 14: PSR - Code Convention

How to PSR-2

• method 의 접근 제어자는 반드시 명시되어야 합니다 .(public, protected, private)

• abstract, final 은 접근제어자 앞에 있어야 하고 static 은 뒤에 있어야 합니다 .• 제어구조문 (if, switch, for 등등 ) 을 여는 중괄호는 해당 구문과 같은줄에 있어야

하고 닫는중괄호는 내용의 다음줄에 있어야 합니다 .• 제어구조문 여는 소괄호앞에는 한 칸의 공백이 있어야 하고 뒤에는 공백이 없어야

하며 닫는 소괄호는 반대로 앞에는 공백이 없어야 하고 뒤에는 한 칸의 공백이 있어야 합니다 .

• method 인자를 담는 소괄호는 앞 , 뒤에 공백이 없어야 합니다 .• 각 줄에 내용이 끝난 이후에는 공백이 없어야 합니다 .

• http://www.php-fig.org/psr/psr-2/

Page 15: PSR - Code Convention

How to PSR-2

먼 소린가 싶으시죠 ?예시를 보시면 쉽게 알 수 있습니다 .

Page 16: PSR - Code Convention

How to PSR-2

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public function sampleMethod($a, $b = null) { if ($a === $b) { bar(); } elseif ($a > $b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } }

filnal public static function bar() { }}

namespace 다음 공백 줄

use 다음 공백 줄

들여쓰기 한 깊이당 스페이스 4번

class, method 여는 중괄호는 다음줄에

조건제어절 여는 중괄호는 같은줄에

elseif 는 붙여서

괄호 안쪽에 공백 없게 , 쉼표뒤엔 한칸 공백

접근제어자 명시 , final 은 앞에 , static 은 뒤에

닫는 중괄호는 항상 다음줄에

✔✔

Page 17: PSR - Code Convention

How to PSR-2

<?phpswitch ($expr) { case 0: echo ‘first case’; break; case 1: echo ‘hello’; // no break case 2: case 3: return false; default: echo ‘default case’; break;}

for ($i = 0; $i < 10; $i++) {}

foreach ($iterable as $key => $value) {}

true, false, null 은 소문자로

break 없는 구분은 주석 표기

✔✔

✔✔✔ ✔

✔ ✔

✔ ✔

Page 18: PSR - Code Convention

How to PSR-2

<?phpclass ClassName extends ParentClass implements ArrayAccess, Countable, Serializable{ protected $foo;

public function Bar($arg1, $arg2, $arg3 = null) { $zim->bas( $arg1, $arg2, $arg3 ); }}

extends, implements 여러개라 줄바꿈을 하고 싶다면 한줄에 한개만 표기 , 한 번의 들여쓰기가 되어야 함

여는 중괄호는 다음줄에

var 는 사용하지 않음 public, protected, private 만 사용

method, function 호출시에도 인자값이 여러개라 줄바꿈을 하고 싶다면 한줄에 한개만 표기 , 한 번의 들여쓰기가 되어야 함

인자중 default 값이 있는것은 뒤쪽에 배치

Page 19: PSR - Code Convention

How to PSR-2

<?phptry {} catch (FirstExceptionType $e) {} catch (OtherExceptionType $e) {}

while ($expr) {}

do {} while ($expr);

✔ ✔ ✔

✔ ✔ ✔

✔ ✔

✔✔

Page 20: PSR - Code Convention

How to PSR-2

<?php$closure = function ($arg1, $arg2) {};

$closure = function ($arg1, $arg2) use ($var1, $var2) {}

$closure = function ( $arg1, $arg2, $arg3) {}

$closure = function () use ( $var1, $var2, $var3) {}

클로저는 조건제어문과 같이 여는 중괄호를 같은 줄에 표기

인자값이 여러개라 줄바꿈을 하고 싶다면 한줄에 한개만 표기 , 한 번의 들여쓰기가 되어야 함

✔✔✔

Page 21: PSR - Code Convention

How to PSR-2

<?php$closure = function ( $arg1, $arg2, $arg3) use ( $var1, $var2, $var3) {}

$closure = function ( $arg1, $arg2 $arg3) use ($var) {}

$closure = function ($arg) use ( $var1, $var2, $var3) {}

이럴때도 마찬가지로 한줄에 한개만 표기

$foo->bar( $arg1, function ($arg) use ($var) { }, $arg3);

method, function 호출 인자에 클로저가 들어갈때는 한줄에 각 인자 하나씩만 오도록 작성

Page 22: PSR - Code Convention

ETC• PSR-0, 4 는 auto Loading 을 위한 형식에 대한

규격입니다 .

기본은 namespace 구분자는 디렉토리 구분자로 변경된다는 것입니다 .그러나 “ -” 로 연결된 하나의 디렉토리로 만들수도 있습니다 .가장 중요한건 class 명과 파일명을 일치시켜야 한다는 것입니다 .

class 명 접두사 기본 디렉토리 파일 경로

\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php

\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php

\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php

\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

Page 23: PSR - Code Convention

ETC• PSR-3 은 Logger Interface 에 대한 내용입니다 .

• http://www.php-fig.org 에 방문 하시면 더 많은 정보를 얻을 수 있습니다 .

로그 표현 레벨은 8 가지로 고정 되고 , 메시지는 지정된 문자열에 키워드만 치환되어 표현하는 방식으로 이루어져야 합니다 .Psr/Log 를 상속받아 구현되는 것을 명시하고 있습니다 .

* Log level : debug, info, notice, warning, error, critical, alert, emergency

Page 24: PSR - Code Convention

End.