본문 바로가기
개발공부/PHP

[공유] Clean Code PHP 한글판

by bzerome240 2023. 5. 16.

 

PHP 에도 클린코드가 있다~

 

 

clean code PHP 버전으로 만든 문서를 한글로 번역한 Git Readme 문서를 봤는데

간단한 코드 예제와 함께 클린 코드 규칙을 잘 설명해주어서 공유하게되었습니다.

 

GitHub - yujineeee/clean-code-php: Clean Code PHP 한글판

:bathtub: Clean Code PHP 한글판. Contribute to yujineeee/clean-code-php development by creating an account on GitHub.

github.com

 

Robert C. Martin의 책, 소프트웨어 엔지니어링의 교과서라고 불리는 Clean Code PHP 버전입니다.

이 문서는 스타일 가이드가 아닙니다.

PHP로 읽기 쉽고 재사용 가능하며, 리팩토링이 쉬운 소프트웨어를 만들어내기 위한 안내서입니다.

 

 

메모!

 

플래그를 함수의 매개변수로 사용하지 마세요

 

플래그를 사용하는 것은 함수가 한가지 이상의 일을 할 것이라 말하는 셈입니다.

함수는 한 가지 일을 해야 합니다.

만약 Boolean 값에 따라 서로 다른 코드를 사용해야 한다면 함수를 분리하세요.

 

조건문을 피하세요

 

"어떻게 if 문 없이 뭔가를 할 수 있죠?" 그에 대한 답은 다형성입니다. 클린코드 개념 때문입니다.

'함수는 한 가지만 해야 합니다.'

if 문을 가진 함수와 클래스를 가지게 될 때, 우리는 우리의 함수가 한가지 이상을 한다고 사람들에게 말하는 셈입니다.

 

불필요한 코드는 제거하세요

 

불필요한 코드는 중복된 코드만큼이나 나쁩니다. 코드에 남겨야 할 이유가 전혀 없습니다.

호출이 안되고 있다면 없애버리세요! 만약 여전히 필요하대도 버전 기록에 안전하게 남아있을 것입니다.

 

SOLID

 

SOLID 는 Robert Martin이 명명한 5가지 원칙의 앞 글자로 객체지향 프로그래밍과 디자인을 뜻하는 5가지 기본 원칙을 뜻합니다.

 

S: 단일 책임 원칙 (SRP)

한 클래스를 많은 기능을 꽉 채우는 것은 유혹적입니다.

클래스를 변경해야 할 필요가 있을 때 드는 시간을 최소화시키는 것은 중요합니다.

너무 많은 기능이 한 클래스에 있고 그중 한 부분을 수정해야 한다면 코드 안에 의존하고 있는 다른 모듈에 어떤 영향을 미치는지 파악하기 어렵기 때문입니다.

 

O: 개방/폐쇄 원칙 (OCP)

"소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해서는 개방되어야 하며, 변경에서는 폐쇄되어 있어야 합니다."

이 원칙은 기본적으로 사용자가 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있도록 허용해야 한다는 것을 뜻합니다.

 

L: 리스코브 치환 원칙 (LSP)

만약 우리가 부모 클래스와 자식 클래스를 가지고 있다면, 부정확한 결과를 얻지 않으면서 기본 클래스와 자식 클래스를 서로 교환하여 사용할 수 있다는 것입니다. 

수학적으로 정사각형은 사각형입니다. 그러나, 상속을 통한 'is-a' 관계로 설계하면 빠르게 문제에 휘말리게 됩니다.

 

I: 인터페이스 분리 원칙 (ISP)

"클라이언트는 사용하지 않는 인터페이스에 의존하도록 강요되어서는 안 된다."

 

D: 의존성 역전 원칙 (DIP)

  1. 상위 레벨의 모듈은 하위 레벨의 모듈에 의존해서는 안 됩니다. 상위 레벨과 하위 레벨의 모듈 모두 추상화에 의존해야 합니다.
  2. 추상화된 것은 구체적인 것에 의존하면 안 됩니다. 구체적인 사항들은 추상화에 의존해야 합니다.

 의존성 주입의 가장 큰 장점은 모듈 간의 결합을 줄일 수 있다는 것입니다. 결합은 아주 안 좋은 개발 패턴입니다. 그 이유는 우리의 코드를 리팩토링하기 어렵게 만들기 때문입니다.

 

 

 

 

 

728x90
반응형

'개발공부 > PHP' 카테고리의 다른 글

PHP call by reference  (0) 2024.03.02
PHP 단점 - connection pool  (0) 2023.06.07
PHP 싱글톤 패턴  (0) 2023.03.19
[PHP] redis 라이브러리 - Predis 알아보기  (0) 2022.12.30
[PHP] mysql_num_rows VS mysql_affected_rows  (0) 2020.04.27

댓글