코드를 깨끗하게 유지하기 - Lee-hyuna/33-js-concepts-kr GitHub Wiki
팀원들과 해결 방안을 논의했습니다.
나는 "우리는 이것을 이겨내야 한다" 라고 말했습니다.
이틀 안에 프로토 타입을 개발하기 위해 내 자신을 깊이 파묻었습니다.
모든 인간의 경쟁적 본질은 이제 막 점화 되었으며 사람들은 단순히 1위, 2위, 3위를 위해 경쟁합니다.
몇분 후, 선임 엔지니어였던 판사 한명이 내 책상으로 걸어와 못마땅한 표정으로 말했습니다.
"너의 코드는 깨끗하지 않다, 엉망이야!" 그것이 내가 더 깨끗한 코드를 만들기 시작한 시작점이였습니다.
깨끗한 코드? 글쎄, 나에게는 이상하지 않았지만 코드가 그냥 작동해도 문제가 되는가? 그래, 그건 천번이나 중요하다.
저는 이 행사가 있기 몇 년 전부터 소프트웨어 엔지니어였습니다.
작업용 어플리케이션을 만들었지만, 내 코드를 작동시키는 것과는 다른 말을 들었습니다.
나의 문제는 간단합니다. 효과가 있는 코드를 작성했고, 그 다음에는 기술적 부채를 발생시킬 목적으로 일을 완성하는데 초점을 맞췄습니다.
클린코드를 만드는 방법
Bob 삼촌의 Clean Code의 모든 장을 다 읽은 순간 이런 일이 일어나지 않을 것입니다.
지식과 끊임없는 실천이 필요하기 때문에 원칙과 패턴의 실천을 배워야 합니다.
몇 년이 걸리지만 오늘부터 시작할 수 있습니다.
아무리 깨끗한 코더라도, 항상 깨끗해지는 법을 배울 수 있는 한두가지가 있습니다.
가장 좋은 방법 중 하나는 전문가들로부터 책이나 게시물을 읽고 배우는 것입니다.
트위터 피드를 통해 트윗을 전달하고, 그 사람들이 주는 대화를 듣고, 깃헙에서 그들을 따라하고,
그들의 코드가 어떻게 쓰여지고 구조화되는지 연구하고 배워야 합니다.
해당 분야의 전문가로부터 지속적으로 배우지 않으면 엔지니어로서의 성장이 제한됩니다.
함수를 작게 유지하라
이것은 가능한 한 짧게 함수를 유지하는 것을 강조하는 1,337개 기사 중 하나 일 것입니다.
여기서는 쉽게 잘 못 이해할 수 있습니다.
깨끗한 코드는 간단한 메서드 작성뿐만 아니라 의도를 명확하게 전달하는 코드 작성에 관한 것입니다.
함수가 너무 길면 함수가 너무 많이 수행되고 있음을 나타내며 독자는 자신이하는 일을 해독하지 못할 수 있습니다.
함수는 한 가지 일을 해야합니다.
if($order->contains($status){
//do something with order
}
function contains($status){
$orderStatuses =['accepted','delivered','rejected','processed'];
if (in_array($status, $orderStatuses)) {
return true;
}
return false;
}
우리는 함수를 다음과 같이 작헝하여 'contains'를 더 깨끗하게 만들 수 있습니다.
function contains($status){
return in_array($status, $this->config->statuses);
}
이 기능은 'contains' 함수가 더 깨끗할 뿐 아니라 분리되어 있습니다.
변수 또는 함수는 수행하는 작업을 나타내는 이름을 사용해야 합니다.
함수에 사용할 이름을 결정하는 것은 때때로 지루할 수 있지만 반드시 노력할 가치가 있습니다.
코드가 변경 될 때 업데이트되지 않을 수 있는 주석을 작성하지 않아도 됩니다.
$date = date('Y-m-d'); // Ofcourse, it's a date but too generic!
$orderCreationDate = date('Y-m-d'); // cleaner code
‘If’ 및 ‘Switch’ 문을 피하세요.
개인적으로 이것을 이해하는 데 시간이 걸렸습니다.
“내가 가장 좋아하는 것 중 하나를 피하도록 어떻게 말할 수 있습니까? ”
사실, 대부분의 조건문은 별도의 함수와 클래스로 쉽게 추출 할 수 있습니다.
이것은 if 및 switch 문을 사용해서는 안되지만 경우에 따라 피할 수 있다고 말하는 것은 아닙니다.
다음은 좋은 예입니다.
class BookOrder
{
public function process()
{
switch ($this->book->type) {
case 'audiocopy':
return $this->processAudioBook();
break;
case 'downloadablecopy':
return $this->processDownloadableCopy();
break;
case 'paperbookcopy':
return $this->processPaperBookCopy();
break;
default:
}
}
}
이것을 작성하는 더 깨끗하고 유지 보수가 쉬운 방법은 다음과 같습니다.
interface IBookOrder {
public function process();
}
class AudioBookOrder implements IBookOrder :void {
public function process()
{
// TODO: Implement process() method.
}
}
class PaperBookOrder implements IBookOrder: void {
public function process()
{
// TODO: Implement process() method.
}
}
class DownloadableBookOrder implements IBookOrder: void {
public function process()
{
// TODO: Implement process() method.
}
}
Avoid mental mapping
깨끗한 코드는 읽고 이해하기 쉬워야 하며 추측 할 여지가 없어야 합니다.
프로그램을 단순하게 보이게하는 것은 언어가 아니지만, 언어를 단순하게 보이게하는 프로그래머입니다.
- 로버트시 마틴
다음 코드는 고객이 일정 금액을 인출 할 수 있는지 확인합니다. 작동하지만 지저분합니다.
if($this->user->balance > $amount && $this->user->activeLoan===0){
$this->user->balance -= $amount; // withdraw amount;
}
더 깨끗하게 만들어 봅시다.
if($this->hasNoActiveLoan() && $this->canWithdrawAmount($amount)){
$this->withdraw($amount);
}
public function hasNoActiveLoan(){
return $this->user->activeLoan === 0;
}
public function canWithdrawAmount(float $amount){
return $this->user->balance > $amount;
}
public function withdraw(float $amount){
$this->user->balance -= $amount;
}
이것은 이해하기 쉬울뿐만 아니라 테스트 하기도 쉽습니다.
S.O.L.I.D 원칙 이해 및 적용
S.O.L.I.D는 Robert C Martin이 정의한 객체 지향 프로그래밍의 처음 5가지 원칙의 약자입니다.
이 원칙을 사용하면 결합성이 뛰어나고 응집력 있고 캡슐화 된 코드를 작성할 수 있습니다.
원칙은 밀접한 관련이 있으며 성공적인 응용 프로그램만으로 더 나은 코드를 작성할 수 있습니다.
나는 이것을 다른 게시물에 저장하지만 여기에서 이러한 원칙에 대해 읽을 수 있습니다.
너무 자책하지 마라
이것이 왜 목록에 있는지 궁금하십니까? 깨끗한 코드 세계에 빠지기 쉽고 하루에 한 번 모든 것을 흡수하기를 원합니다.
슬픈 소식은 시간, 몇 달, 몇 년, 헌신이 필요하다는 것입니다.
원칙은 반드시 배우고 실천해야하지만 모든 것이 더 깨끗해지기로 결정하기 시작했습니다.
결론
이 게시물을 작성함으로써 누군가에게 더 나은 개발자가되고 깨끗한 코드에 관심을 갖기를 바랍니다. 의견을 남기고 예제를 더 깨끗하게하거나 LinkedIn에 나를 추가하거나 새로운 기회에 대해 알려주십시오.