위키피디아에서 guard code를 아래와 같이 설명한다.
💡 Regardless of which programming language is used, guard code or a guard clause is a check of integrity preconditions used to avoid errors during execution. - Wikipedia
guard는 전제조건의 무결성을 확인하는 코드라고 적혀있다. 이는 guard code 이후 실행되는 코드는 전제조건을 만족한다는 것이다.
이를 이용하여, if
문의 중첩을 줄일 수 있다.
주로 if - else if
문이 여러개 중첩할 때 사용을 고려해볼 수 있고, if
문의 조건 중 한 조건의 분기문이 간단하면 사용하기에 좋다.
const convertUser = function(user) {
if (user) {
if(user.country === 'KOR' || user.country === 'NZL') {
if(user.language === 'en') {
// 복잡한 코드
return user;
} else {
throw Error('영어안써요');
}
} else {
throw Error('한국인, 뉴질랜드인이 아니예요');
}
} else {
throw Error('유저가 없어요.');
}
}
평탄화 작업을 통해 코드를 읽기 쉽게 만들어 준다.
if
문의 내용이 길다면 위 아래로 스크롤을 하며 읽어야 되기 때문이다.if
조건에 있는 user.language === 'en'
, user.country === 'KOR'
, user.country === 'NZL'
와 같은 조건들도 고려하여 코드를 해석해야 한다. 이는 코드를 읽기 어렵게 하는 요인이다. (뇌의 처리 능력 부족)const convertUser = function(user) {
if (!user) {
throw Error('유저가 없어요.');
}
if (!isNzlOrKor(user)) {
throw Error('한국인, 뉴질랜드인이 아니예요');
};
if (!isAvailableEnglish(user)) {
throw Error('영어안써요');
}
// 복잡한 코드
return user;
}
const isNzlOrKor = function(user) {
return user.country === 'KOR' || user.country === 'NZL'
}
const isAvailableEnglish = function(user) {
return user.language === 'en'
}
user
가 있는지 없는지가 user.country
보다 더 큰 범주이다. 그렇기에 user
를 이용하여 guard code를 작성한다.isNzlOrKor
와 같은 함수를 통해 조건의 가독성 좋게 만들 수 있다.