์ํคํผ๋์์์ 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
์ ๊ฐ์ ํจ์๋ฅผ ํตํด ์กฐ๊ฑด์ ๊ฐ๋
์ฑ ์ข๊ฒ ๋ง๋ค ์ ์๋ค.์ฐธ๊ณ : Refactoring: Guard Clauses