오류 처리는 강력하고 안정적인 소프트웨어를 작성하는 데 있어 중요한 측면입니다. 그러나 신중하게 수행하지 않으면 읽고 유지하기 어려운 코드가 복잡해질 수 있습니다.
클린 코드 7장에서는 명확성과 단순성을 강조하면서 코드를 복잡하게 만들지 않고 오류를 처리하는 기술을 다룹니다.
이 문서에서는 이 장의 주요 개념과 이를 JavaScript에 적용하여 코드베이스를 깔끔하고 유지 관리 가능하게 유지하는 방법을 살펴보겠습니다.
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); }
예외를 사용하여 오류 처리 논리를 기본 논리에서 분리하여 코드를 더 깔끔하고 이해하기 쉽게 만듭니다.
예외가 발생할 때 오류에 대한 컨텍스트를 제공하는 의미 있는 오류 메시지를 제공하는 것이 중요합니다.
이렇게 하면 코드를 자세히 살펴볼 필요 없이 문제를 빠르게 진단하는 데 도움이 됩니다.
예: 오류 메시지에 컨텍스트 제공
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 }
설명 오류 메시지는 문제를 즉시 이해하는 데 필요한 컨텍스트를 제공합니다.
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 참조 오류를 방지하고 코드를 깔끔하게 유지하는 데 도움이 됩니다.
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); }
로직을 별도의 함수로 분할하여 중첩을 줄이고 가독성을 높였습니다.
예외가 발생하면 올바르게 처리해야 합니다.
예외를 조용히 무시하면 예상치 못한 동작이 발생하고 디버깅이 어려워질 수 있습니다.
예: 예외를 무시하지 마십시오
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 사용 제한, 발견된 예외 무시 안 함)을 따르면 오류 처리 논리를 보장할 수 있습니다. 강력하면서도 눈에 띄지 않습니다.
즐거운 코딩하세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3