
else 구문의 논리적 / 스타일적 문제
- if-else 구문은 함수의 '반전된 기능'을 암시함
- 참인 경우와 거짓인 경우가 명시적으로 대비되어 있음
- 이는 코드를 읽는 사람에게 "두 가지 상반된 경우를 처리하는 함수"라는 잘못된 인상을 줄 수 있음
- 불필요한 코드 블록 증가
- 조건문의 복잡도 상승
기존 방식 (안티 패턴)
function getActiveUserName(user){
if(user.name){
return user.name;
} else { // 👎 불필요한 else 블록
return '이름없음';
}
}
단축 평가 활용
function getActiveUserName(user){
return user.name || '이름없음'; // 👍 단순한 폴백(fallback) 값 처리
}
Early Return 패턴
function getActiveUserName(user){
if(user.name){
return user.name;
}
return '이름없음'; // 👍 기본값으로서의 의미가 더 명확
}
💡 개선효과
function loginService(isLogin, user){
if (!isLogin){
if (checkToken()){ // 👎 과도한 중첩
if(!user.nickName){ // 👎 판단하기 어려운 로직
return registerUser(user);
} else {
refreshToken();
return '로그인 성공';
}
} else {
throw new Error('No Token');
}
}
}
🚨 이런 코드의 문제점
function login() { // 👍 관심사 분리
refreshToken();
return '로그인 성공';
}
function loginService(isLogin, user) {
if (isLogin) { // 👍 빠른 반환
return;
}
if (!checkToken()) { // 👍 명확한 에러 처리
throw new Error('No Token');
}
if (!user.nickName) { // 👍 평탄화된 조건문
return registerUser(user);
}
return login(); // 👍 추상화된 로직
}
function 오늘하루(condition, weather, isJob) {
if (condition === 'GOOD') { // 👎 불필요한 중첩
공부();
게임();
유튜브보기();
if (weather === 'GOOD') { // 👎 가독성 저하
운동();
빨래();
}
if (isJob === 'GOOD') {
야근();
취침();
}
}
}
function 오늘하루(condition, weather, isJob) {
if (condition !== 'GOOD') { // 👍 early return
return;
}
// 👍 조건 없이 항상 실행
공부();
게임();
유튜브보기();
// 👍 평탄화된 조건부 활동
if (weather === 'GOOD') {
운동();
빨래();
}
if (isJob === 'GOOD') {
야근();
취침();
}
}
💡 개선효과
Early Return 활용
의존성 평탄화
구조적 이점