"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 클린 코드 이해: 처리 ⚡

클린 코드 이해: 처리 ⚡

2024-08-25에 게시됨
검색:674

Understanding Clean Code: Handling ⚡

오류 처리는 강력하고 안정적인 소프트웨어를 작성하는 데 있어 중요한 측면입니다. 그러나 신중하게 수행하지 않으면 읽고 유지하기 어려운 코드가 복잡해질 수 있습니다.

클린 코드 7장에서는 명확성과 단순성을 강조하면서 코드를 복잡하게 만들지 않고 오류를 처리하는 기술을 다룹니다.

이 문서에서는 이 장의 주요 개념과 이를 JavaScript에 적용하여 코드베이스를 깔끔하고 유지 관리 가능하게 유지하는 방법을 살펴보겠습니다.


? 1. 오류 코드 대신 예외를 사용하세요

Clean Code의 주요 원칙 중 하나는 오류 코드보다 예외를 선호하는 것입니다.

예외를 사용하면 기본 논리에서 오류 처리 논리를 분리하여 코드를 더 쉽게 읽을 수 있습니다.

예: 오류 코드 방지

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        return -1;  // Error code for user not found
    }
    return user;
}

const result = getUser(123);
if (result === -1) {
    console.error('User not found');
} else {
    console.log(result);
}

이 예에서는 오류 처리가 기본 논리와 얽혀 있어 따라가기가 더 어렵습니다.

예: 예외 사용

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        throw new Error('User not found');
    }
    return user;
}

try {
    const user = getUser(123);
    console.log(user);
} catch (error) {
    console.error(error.message);
}

예외를 사용하여 오류 처리 논리를 기본 논리에서 분리하여 코드를 더 깔끔하고 이해하기 쉽게 만듭니다.


? 2. 의미 있는 메시지로 맥락 제공

예외가 발생할 때 오류에 대한 컨텍스트를 제공하는 의미 있는 오류 메시지를 제공하는 것이 중요합니다.

이렇게 하면 코드를 자세히 살펴볼 필요 없이 문제를 빠르게 진단하는 데 도움이 됩니다.

예: 오류 메시지에 컨텍스트 제공

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        throw new Error(`User with ID ${id} not found`);
    }
    return user;
}

try {
    const user = getUser(123);
    console.log(user);
} catch (error) {
    console.error(error.message);  // Outputs: User with ID 123 not found
}

설명 오류 메시지는 문제를 즉시 이해하는 데 필요한 컨텍스트를 제공합니다.


? 3. Null을 반환하지 마세요

null을 반환하면 추적하기 어려운 null 참조 오류가 발생할 수 있습니다.

null을 반환하는 대신 예외를 발생시키거나 기본 동작을 제공하는 특수 사례 패턴을 사용하는 것이 좋습니다.

예: Null 반환 방지

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        return null;  // This can lead to null reference errors
    }
    return user;
}

const user = getUser(123);
if (user !== null) {
    console.log(user.name);
}

null을 반환하려면 추가 확인이 필요하며 코드가 복잡해질 수 있습니다.

예: 예외 발생 또는 특수 사례 사용

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        throw new Error(`User with ID ${id} not found`);
    }
    return user;
}

// OR

class NullUser {
    get name() {
        return 'Guest';
    }
}

function getUser(id) {
    const user = database.findUserById(id);
    return user || new NullUser();
}

예외를 발생시키거나 특수 사례 개체(예: NullUser)를 사용하면 null 참조 오류를 방지하고 코드를 깔끔하게 유지하는 데 도움이 됩니다.


? 4. Try-Catch-Finally를 드물게 사용하세요.

try-catch-finally 블록은 예외 처리에 필수적이지만 이를 과도하게 사용하면 코드가 복잡해질 수 있습니다.

필요한 경우에만 사용하고 블록이 깊게 중첩되지 않도록 하세요.

예: 과도한 Try-Catch 방지

try {
    const data = JSON.parse(input);
    try {
        const user = getUser(data.id);
        try {
            sendEmail(user.email);
        } catch (error) {
            console.error('Failed to send email:', error.message);
        }
    } catch (error) {
        console.error('User retrieval failed:', error.message);
    }
} catch (error) {
    console.error('Invalid JSON:', error.message);
}

이 코드는 여러 개의 중첩된 try-catch 블록으로 인해 따라가기가 어렵습니다.

예: 혼란을 줄이기 위한 리팩터링

function parseInput(input) {
    try {
        return JSON.parse(input);
    } catch (error) {
        throw new Error('Invalid JSON');
    }
}

function retrieveUser(data) {
    return getUser(data.id);
}

function notifyUser(user) {
    sendEmail(user.email);
}

try {
    const data = parseInput(input);
    const user = retrieveUser(data);
    notifyUser(user);
} catch (error) {
    console.error(error.message);
}

로직을 별도의 함수로 분할하여 중첩을 줄이고 가독성을 높였습니다.


? 5. 포착된 예외를 무시하지 마세요

예외가 발생하면 올바르게 처리해야 합니다.

예외를 조용히 무시하면 예상치 못한 동작이 발생하고 디버깅이 어려워질 수 있습니다.

예: 예외를 무시하지 마십시오

try {
    const user = getUser(123);
} catch (error) {
    // Ignoring the exception
}

예외를 무시하면 코드의 잠재적인 문제를 숨길 수 있습니다.

예: 예외 처리 또는 기록

try {
    const user = getUser(123);
} catch (error) {
    console.error('An error occurred:', error.message);
}

예외를 처리하거나 기록하면 문제를 인지하고 그에 따라 해결할 수 있습니다.


⚡ 결론

깔끔하고 유지 관리가 가능한 JavaScript 코드를 작성하려면 효과적인 오류 처리가 필수적입니다.

클린 코드의 원칙(예: 오류 코드 대신 예외 사용, 오류 메시지에 컨텍스트 제공, null 반환 방지, try-catch 사용 제한, 발견된 예외 무시 안 함)을 따르면 오류 처리 논리를 보장할 수 있습니다. 강력하면서도 눈에 띄지 않습니다.

즐거운 코딩하세요!

릴리스 선언문 이 글은 https://dev.to/alisamir/understanding-clean-code-handling-59ji?1에서 복제되었습니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3