>웹 프론트엔드 >JS 튜토리얼 >클린 코드에 대해 무엇을 이해하고 있나요?

클린 코드에 대해 무엇을 이해하고 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-20 02:41:07222검색

소프트웨어 개발 모범 사례 살펴보기: 클린 코드에 대한 고찰

좋은 소프트웨어 개발 방식에 대한 연구를 시작할 때 저는 "클린 코드"(클린 코드)를 읽기 쉬운 코드를 보장하기 위한 간단한 규칙 집합으로 상상했습니다. 부분적으로 이러한 인식은 정확합니다. 그러나 이러한 규칙은 모든 유형의 코드에 항상 적용되는 것은 아니며 책을 읽는 것만으로는 완전히 이해되지 않습니다.

O que eu entendo sobre Clean Code?

클린 코드: 지속적인 여정

최근에 로버트 C. 마틴(Robert C. Martin)의 고전 클린 코드를 다시 읽었는데, 6년 전 처음 읽었을 때와 이해가 많이 달랐습니다. 당시 대학생으로서 제시된 문제와 해결책 중 상당수는 완전히 명확하지 않았습니다. 이것은 큰 오해입니다. 클린 코드는 초보자를 위한 것이 아닙니다.

"...당신이 의사인데 환자가 수술을 준비하면서 시간이 너무 오래 걸린다는 이유만으로 손 씻기를 모두 중단하라고 요구한다면 어떨까요? [...] 프로그래머가 수술에 양보하는 것은 비전문적입니다. 혼란스러운 코드 생성의 위험을 이해하지 못하는 훌륭한 관리자의 의지입니다."

이 기사는 제가 읽은 내용 중 관련 내용을 강조하고 실제 경험을 공유합니다.

기능: 단일 책임

잘 작성된 함수에는 단 하나의 책임이 있어야 합니다. 즉, 한 가지 일을 하고, 잘 하고, 그 일만 해야 합니다. 여러 책임을 단일 역할로 그룹화하면 코드를 읽고 테스트하고 유지 관리하기가 어려워집니다.

여러 책임이 있는 역할의 예(사용자 저장 및 알림):

<code>function salvarUsuarioENotificar(usuario) {
    // Valida os dados do usuário
    if (!usuario.nome || !usuario.email) {
        throw new Error('Dados do usuário incompletos.')
    }

    // Salva no banco de dados
    bancoDeDados.salvar(usuario)

    // Envia um e-mail de boas-vindas
    emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!')
}</code>

리팩토링 후 특정 역할의 각 책임은 다음과 같습니다.

<code>function validarUsuario(usuario) {
    if (!usuario.nome || !usuario.email) {
        throw new Error('Dados do usuário incompletos.')
    }
}

function salvarUsuario(usuario) {
    bancoDeDados.salvar(usuario)
}

function enviarEmailDeBoasVindas(usuario) {
    emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!')
}

function processarCadastroDeUsuario(usuario) {
    validarUsuario(usuario)
    salvarUsuario(usuario)
    enviarEmailDeBoasVindas(usuario)
}</code>

이제 각 함수에는 단일 책임이 있으므로 코드를 더 읽기 쉽고 유지 관리하기가 더 쉽습니다.

댓글: 설명이 쉬운 이름을 우선시하세요

댓글은 유용하지만 중복을 피하기 위해 설명이 가능한 이름을 우선시합니다. 명백한 댓글은 코드를 오염시킵니다.

불필요한 댓글의 예:

<code>/** Dia do mês **/
private number diaDoMes;</code>

더 명확한 이름과 코멘트 없음으로 개선:

<code>private number diaDoMesAtual;</code>

객체 및 데이터 구조: 캡슐화 및 명확성

좋은 객체 지향 디자인은 작업을 노출하고 구현 세부 사항을 숨기는 데 중점을 둡니다. 이는 캡슐화를 촉진하고 결합을 줄이며 유지 관리를 용이하게 합니다.

클래스의 캡슐화 예 Circulo:

<code>class Circulo implements Forma {
    private Ponto centro;
    private number raio;
    private number PI = 3.14159;

    public number calcularArea() {
        return PI * raio * raio;
    }
}</code>

다른 목적으로 다른 범위의 변수를 재사용하지 마세요. 명확성을 높이기 위해 고유한 변수를 사용하세요.

오류 처리: 여러 번 확인하는 대신 예외

과거에는 오류 처리가 제한되었습니다. 오늘날 예외를 사용하면 코드가 더 깔끔하고 가독성이 높아집니다.

여러 검증이 포함된 자세한 코드의 예:

<code>function salvarUsuarioENotificar(usuario) {
    // Valida os dados do usuário
    if (!usuario.nome || !usuario.email) {
        throw new Error('Dados do usuário incompletos.')
    }

    // Salva no banco de dados
    bancoDeDados.salvar(usuario)

    // Envia um e-mail de boas-vindas
    emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!')
}</code>

예외를 사용한 리팩토링:

<code>function validarUsuario(usuario) {
    if (!usuario.nome || !usuario.email) {
        throw new Error('Dados do usuário incompletos.')
    }
}

function salvarUsuario(usuario) {
    bancoDeDados.salvar(usuario)
}

function enviarEmailDeBoasVindas(usuario) {
    emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!')
}

function processarCadastroDeUsuario(usuario) {
    validarUsuario(usuario)
    salvarUsuario(usuario)
    enviarEmailDeBoasVindas(usuario)
}</code>

단위 테스트: 명확성과 집중력

클린 테스트는 명확하고 단순하며 일관성이 있어야 합니다. 적은 표현으로 많은 정보를 전달합니다.

테스트의 일반적인 구조: 구축, 운영, 검증

수업: SRP(단일 책임 원칙)

클래스 이름은 클래스의 책임을 반영해야 합니다. 수업은 소규모로 이루어져야 하며, 단일한 목적을 가지고 있어야 합니다. SRP는 각 클래스가 단 하나의 책임만을 갖도록 보장합니다.

결론: 클린 코드는 하나의 여정입니다

클린코드는 한번에 배울 수 없습니다. 이는 연습, 성찰, 진화가 필요한 지속적인 여정입니다. 진정한 기술은 경험과 개선을 볼 수 있는 능력과 함께 제공됩니다. Kent Beck의 규칙(테스트, 중복 방지, 명확성, 클래스 및 방법 최소화)은 귀중한 가이드입니다.

위 내용은 클린 코드에 대해 무엇을 이해하고 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.