최근 다양한 컨설팅 프로젝트에서 동일한 일이 계속 반복되는 것을 발견했습니다. 바로 클러스터된 코드입니다. 그게 무슨 말이에요? 글쎄요, 이렇게 말하겠습니다. 코딩할 때 깨끗한 코드를 생각해야 합니다. 네, 클린 코드에 대해 이야기하는 사람이 한 명 더 있다는 걸 알아요. 왜 내 말을 들어야합니까? 저는 12살 때부터 컴퓨터와 사물이 어떻게 작동하는지에 관심이 많았습니다. 저는 15세가 되었을 때 MVVM, MVC, 아키텍처 등을 수행하는 방법에 대한 많은 비디오인 Pluralsight를 보기 시작했습니다. 수많은 비디오를 보았지만 아직 프로그래밍 방법을 몰랐습니다. 따라해봤는데 내용이 많이 이해되지 않았던 기억이 나네요.
지난 몇 년 동안 저는 다양한 회사에서 설계자이자 선임 소프트웨어 개발자로 일해 왔습니다. 나의 배경은 컴퓨터 공학과 IT 견습입니다. 그리고 저는 여러분 모두가 알고 있듯이 사람들을 돕기 위해 제가 알고 있는 것을 여러분과 공유하려고 노력할 뿐만 아니라 LinkedIn의 모든 사람들처럼 노출되도록 노력합니다. 네, 그들은 당신이 생각하는 것만큼 글쓰기를 좋아하지 않습니다. 그것은 순전히 비즈니스 모델입니다. 하지만 그건 중요하지 않죠? 자, 여기 있습니다. 언젠가 당신도 내 제품 중 하나를 구매하게 되기를 바랍니다. ;)
이제 제가 최근 여러 프로젝트에서 본 것을 말씀드리겠습니다. 클린 코드가 항상 적용되지 않는 이유는 반드시 사람들이 지식이 없기 때문은 아니라고 생각합니다. 이는 종종 다양한 프로젝트의 엄격한 마감일과 압력에 관한 것입니다. 저와 같은 소프트웨어 엔지니어이거나 프로젝트 관리자라면 프로젝트가 성공하려면 일정한 제약과 시간적 압박이 있다는 것을 알고 계실 것입니다.
클라이언트에게 전달하기 위해서는, 심지어 사내에서 일할 때에도 마감 기한과 다양한 이해관계자에 직면하게 됩니다. 회사는 고객이 정기적으로 새로운 기능을 기대하는 구독 모델을 운영하는 경우가 많습니다. 이로 인해 많은 어려움이 발생합니다. 개발자와 프로젝트 기획자는 솔루션을 제대로 생각할 시간이 부족했기 때문에 건축 부채의 함정에 빠지지 않고 프로젝트를 계속 진행해야 합니다.
한 번 문제가 발생하면 다시 돌아가서 고치기가 정말 어렵습니다. 내 경험에 따르면 사람들은 자신의 프로젝트를 리팩터링하기 위해 다시 돌아가는 경우가 많지 않습니다. 적어도 제가 아는 사람들은 그렇지 않습니다. 당신이 다르다면 알려주세요. 리팩토링을 할 수 있는 방법은 다양하고 도움이 많이 되지만, 우선순위가 없다는 것이 문제입니다. 코드가 작동하고 클라이언트가 만족하면 리팩토링이 목록의 맨 위에 있지 않습니다. 하지만 2~3년 앞을 생각해 봅시다. 코드가 점점 더 클러스터되면 어떻게 될까요?
모놀리식 아키텍처를 마이크로서비스 아키텍처로 개편하기 위해 결국 많은 개발자를 고용하게 될 수 있으며, 이는 많은 비용이 듭니다. 이것이 바로 클린 코드에 대해 생각해야 하는 이유입니다. 프로젝트를 시작할 때뿐만 아니라, 잠에서 깨어났을 때뿐만 아니라 항상 항상 말이죠. 결국 바르지 않으면 다시 물게 되니까요.
클린 코드를 위한 실천 전략
일관적인 코드 검토
정기적인 코드 검토를 통해 코딩 표준을 준수하고 잠재적인 문제를 조기에 발견할 수 있습니다.
자동화된 테스트
단위 테스트, 통합 테스트, 엔드투엔드 테스트 등 자동화된 테스트를 구현하면 문제가 프로덕션에 적용되기 전에 이를 식별하는 데 도움이 됩니다.
정기적인 리팩토링
기술적 부채가 누적되는 것을 방지하고 코드베이스를 유지 관리할 수 있도록 리팩토링을 위해 특별히 프로젝트 일정에 시간을 따로 확보하세요.
단단한 원칙 채택
SOLID 원칙(단일 책임, 공개-폐쇄, Liskov 대체, 인터페이스 분리 및 종속성 반전)은 깔끔하고 유지 관리가 가능한 코드를 작성하기 위한 프레임워크를 제공합니다.
명확한 문서
명확하고 간결한 문서를 작성하면 새로운 개발자가 코드베이스를 더 빨리 이해하고 오류가 발생할 가능성을 줄이는 데 도움이 됩니다.
페어 프로그래밍
페어 프로그래밍을 사용하면 두 명의 개발자가 동일한 코드에서 함께 작업하여 실수를 조기에 파악하고 팀원 간에 지식을 공유할 수 있습니다.
클린 코드의 장기적 이점
유지관리 비용 절감
깔끔한 코드는 유지 관리가 더 쉽고, 버그 수정과 새로운 기능 구현에 소요되는 시간과 비용을 줄여줍니다.
가독성 및 이해도 향상
깔끔한 코드베이스는 읽고 이해하기가 더 쉬우며 새로운 개발자를 온보딩하고 장기적인 프로젝트 지속 가능성을 위해 중요합니다.
향상된 성능
잘 구성된 코드는 불필요한 복잡성을 피하고 리소스 사용을 최적화하여 더 나은 성능을 제공합니다.
확장성 향상
깔끔한 코드를 사용하면 애플리케이션을 더 쉽게 확장하고 새로운 기능을 추가하는 프로세스를 단순화하며 변화하는 요구 사항에 적응할 수 있습니다.
개발자 만족도 향상
깔끔한 코드로 작업하면 좌절감을 줄이고 개발자의 업무 만족도를 높여 생산성을 높이고 이직률을 낮출 수 있습니다.
메시코드 예시
<?php class User extends security\Session { protected $app; public function __construct($app) { $this->app = $app; } public function addSkill(Application $app, Request $request) { $userInput['id'] = $request->request->get('id', null); $userInput['id'] = preg_replace("/[^0-9,.]/", "", $userInput['id']); $app['checkpoint']->minimumRole(1); $user = $app['session']->get('user', []); $userId = $user['profile']['easyJobAddressId']; if ($userInput['id'] === null) { return $app->json(['ok' => true]); } $app['dbs']['appMySql']->insert('skills', [ 'skillId' => $userInput['id'], 'userId' => $userId, 'rank' => 0 ]); return $app->json(['ok' => true]); } }
리팩터링된 코드
리팩터링된 코드는 책임을 세분화하고, 종속성 주입을 사용하고, SOLID 원칙을 따르는 깔끔한 코드 원칙을 준수합니다.
의존성 주입 및 생성자
public function __construct( UserRoleService $userRoleService, RequestStack $requestStack, UserRepository $userRepository, EasyJobServiceInterface $easyJobService, SkillsRepository $skillsRepository, AppDataService $appDataService ) { $this->userRoleService = $userRoleService; $this->requestStack = $requestStack; $this->userRepository = $userRepository; $this->easyJobService = $easyJobService; $this->skillsRepository = $skillsRepository; $this->appDataService = $appDataService; }
종속성을 주입함으로써 각 클래스가 단일 책임을 갖고 쉽게 테스트하고 유지 관리할 수 있도록 합니다.
스킬 추가에 대한 단일 책임
#[Route('/profile/experience/add', name: 'profile_experience_add', methods: ['POST'])] public function addExperience(Request $request): JsonResponse { $this->denyAccessUnlessGranted('ROLE_USER'); $skillId = $request->request->get('id'); if (!is_numeric($skillId)) { return $this->json(['status' => 'error', 'message' => 'Invalid skill ID']); } $userId = $this->getUser()->getId(); $result = $this->appDataService->addSkillToUser($userId, (int) $skillId); return $this->json(['status' => 'ok', 'added' => $result]); }
여기에서는 스킬 추가를 처리하기 위해 전용 방법을 사용합니다. 검증을 보장하고 깔끔하고 간결한 구조를 따릅니다.
관심의 분리
public function index(): Response { $user = $this->getUser(); $userId = $user->getId(); $allSkills = [90, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31]; $skills = array_fill_keys($allSkills, 0); $userSkills = $this->appDataService->getSkillsByUserId($userId); foreach ($userSkills as $skill) { $skillId = $skill->getSkillId(); if (array_key_exists($skillId, $skills)) { $skills[$skillId] = 1; } } }
appDataService를 사용하여 시스템을 분리하는 방법을 살펴보세요.
문제를 분리함으로써 각 메서드가 단일 작업에 집중되도록 하여 코드를 더 쉽게 읽고 유지 관리할 수 있게 되었습니다.
결론
결론적으로 항상 깨끗한 코드를 생각하세요. 지금 당장은 긴급하지 않은 것처럼 보일 수도 있지만 이를 무시하면 나중에 심각한 문제가 발생할 수 있습니다. 깨끗한 코드의 우선순위를 정하면 미래의 시간, 비용, 골치 아픈 일을 줄일 수 있습니다. 정기적으로 리팩토링하고 코딩 표준을 준수하는 것은 건강한 코드베이스를 유지하는 데 중요합니다. 오늘 깔끔한 코드를 작성하기 위해 쏟은 노력은 장기적으로 성과를 거두어 프로젝트의 확장성과 유지 관리가 용이하고 즐겁게 작업할 수 있다는 점을 기억하세요.
위 내용은 깨끗한 코드가 중요한 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!