위키피디아에서 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와 같은 함수를 통해 조건의 가독성 좋게 만들 수 있다.