부정 조건문 지양하기

ljjunh·2024년 11월 17일

clean-code-javascript

목록 보기
16/38
post-thumbnail

부정 조건문은 ! 연산자를 사용하여 조건을 부정하는 형태의 조건문이다.

1. 부정 조건문의 문제점 ❌

1.1 인지 부하 증가

개발자의 사고 과정에 추가적인 단계가 필요하다

// 생각해야 하는 부정 조건문
if (!isNotLoggedIn){
	// 1. "로그인하지 않음"의 반대
    // 2. 즉, "로그인 됨"...?
}

// 명확한 긍정 조건문
if (isLoggedIn){
	// 바로 이해: "로그인 됨"
}

1.2 프로그래밍의 자연스러운 흐름 방해

// 😕 부자연스러운 흐름
if (!isValid) {
    // 실패 케이스가 먼저...
} else {
    // 성공 케이스는 나중에...
}

// 👍 자연스러운 흐름
if (isValid) {
    // 성공 케이스
} else {
    // 실패 케이스
}

1.3 이중 부정과 변수명의 함정

// 😫 헷갈리는 부정적 변수명
const isNotEnabled = false;
const isNotVisible = true;

if (!isNotEnabled && !isNotVisible){ // 머리가 아파요..
	// ???
}

// 🎯 명확한 긍정적 변수명
const isEnabled = true;
const isVisible = false;

if (isEnabled && !isVisible) { // 훨씬 이해하기 쉬움
	// ...
}

2. 부정 조건문이 불가피한 경우

2.1 Early Return

function processUser(user) {
    // 👍 유효성 검사에서의 부정 조건문
    if (!user) {
        throw new Error('사용자 정보가 없습니다');
    }
    
    // 메인 로직
    processUserData(user);
}

2.2 폼 유효성 검사

function validateForm(formData) {
    // 👍 검증 로직에서의 부정 조건문
    if (!formData.email) {
        return '이메일은 필수입니다';
    }
    
    if (!formData.password) {
        return '비밀번호는 필수입니다';
    }
}

2.3 보안 검사

function checkAccess(user) {
    // 👍 보안 검사에서의 부정 조건문
    if (!user.hasPermission) {
        throw new Error('접근 권한이 없습니다');
    }
    
    // 권한이 있는 경우의 로직
    grantAccess();
}

🎯 정리

✅ 부정 조건문이 불가피한 경우

  • Early Retrun 패턴
  • 폼 유효성 검사
  • 보안 검사 로직
  • 예외 처리

❌ 피해야 할 경우

  • 일반적인 비즈니스 로직
  • 긍정 조건으로 표현 가능한 경우
  • 중첩된 조건문

🌟 Best Practices

  • 조건문은 가능한 긍정문으로 작성
  • 변수명은 긍정적으로
  • 부정 조건문은 필요한 경우에만 제한적으로 사용
  • 복잡한 조건은 함수로 추출하여 명확성 확보
profile
Hello

0개의 댓글