JavaScript 기본 - if와 '?'를 사용한 조건 처리

Leejunyoung·2022년 6월 20일
0

JavaScript

목록 보기
12/49

오늘은 자바스크립트의 if와 '?'를 사용한 조건 처리에 대해 공부하겠습니다.
모던 자바스크립트 튜토리얼을 참고하였습니다.

if와 '?'를 사용한 조건 처리

조건에 따라 다른 행동을 취해야 할 때가 있다. 이럴 땐, if문과 '물음표' 연산자라고도 불리는 조건부 연산자 ?를 사용하면 된다.

'if'문

if(...) 문은 괄호 안에 들어가는 조건을 평가하는데, 그 결과가 true이면 코드 블록이 실행된다.

위 예시에선 조건(year == 2015)이 간단한 경우만 다뤘는데, 조건문은 더 복잡할 수도 있다.
조건이 true 일 때 복수의 문을 실행하고 싶다면 중괄호로 코드 블록을 감싸야 한다.

if문을 쓸 때는 조건이 참일 경우 실행되는 구문이 단 한 줄이더라도 중괄호 {}를 사용해 코드를 블록으로 감싸는 것을 추천한다. 이렇게 하면 코드 가독성이 증가한다.

불린형으로의 변환

if(...) 문은 괄호 안의 표현식을 평가하고 그 결과를 불린값으로 변환한다. 형 변환 챕터에서 배운 형 변환 규칙을 잠시 상기해 보자.
  • 숫자 0, 빈 문자열"", null, undefined, NaN은 불린형으로 변환 시 모두 false가 된다. 이런 값들은 'falsy(거짓 같은)' 값이라고 부른다.
  • 이 외의 값은 불린형으로 변환 시 true가 되므로 'truthy(참 같은)' 값이라고 부른다.
  • 이 규칙에 따르면 아래 예시의 코드 블록은 절대 실행되지 않는다.

    아래 예시의 코드 블록은 항상 실행된다.

    아래와 같이 평가를 통해 확정된 불린값을 if문에 전달할 수도 있다.

    'else'절

    if문엔 else 절을 붙일 수 있다. else 뒤에 이어지는 코드는 블록의 조건이 거짓일 때 실행된다.

    'else if'로 복수 조건 처리하기

    유사하지만 약간씩 차이가 있는 조건 여러 개를 처리해야 할 때가 있다. 이때 else if를 사용할 수 있다.

    위 예시에서, 자바스크립트는 조건 year < 2015를 먼저 확인한다. 이 조건이 거짓이라면 다음 조건 year > 2015를 확인한다. 이 조건 또한 거짓이라면 else 절 내의 alert를 실행한다.

    else if 블록을 더 많이 붙이는 것도 가능하다. 마지막에 붙는 else는 필수가 아닌 선택 사항이다.

    조건부 연산자 '?'

    조건에 따라 다른 값을 변수에 할당해줘야 할 때가 있다.

    '물음표(question mark) 연산자'라고도 불리는 '조건부(conditional) 연산자'를 사용하면 위 예시를 더 짧고 간결하게 변형할 수 있다.

    조건부 연산자는 물음표 ?로 표시한다. 피연산자가 세 개이기 때문에 조건부 연산자를 '삼항(temary) 연산자' 라고 부르는 사람도 있다. 참고로, 자바스크립트에서 피연산자가 3개나 받는 연산자는 조건부 연산자가 유일하다.

    문법:

    평가 대상인 condition이 truthy라면 value1이, 그렇지 않으면 value2가 변환된다.

    age > 18 주위의 괄호는 생략 가능하다. 물음표 연산자는 우선순위가 낮으므로 비교 연산자 >가 실행되고 난 뒤에 실행된다.

    아래 예시는 위 예시와 동일하게 동작한다.

    괄호가 있으나 없으나 차이는 없지만, 코드의 가독성 향상을 위해 괄호를 사용할 것을 권유한다.

    주의 : 비교 연산자 자체가 true 나 false 를 반환하기 때문에 위 예시에서 물음표 연산자를 사용하지 않아도 된다.

    다중 '?'

    물음표 연산자 ?를 여러 개 연결하면 복수의 조건을 처리할 수 있다.

    물음표 연산자를 이런 방식으로 쓰는 걸 처음 본 분이라면 이 코드가 어떻게 동작하는지 파악하기 힘들 수 있다. 그러나 주의를 집중하고 보면, 단순히 여러 조건을 나열한 코드임에도 불과하다는 것을 알 수 있다.

    1. 첫 번째 물음표에선 조건문 age < 3 을 검사한다.
    2. 그 결과가 참이면 '아기야 안녕?' 을 반환한다. 그렇지 않다면 첫 번째 콜론 ":"에 이어지는 조건문 age < 18 을 검사한다.
    3. 그 결과가 참이면 '안녕!'을 반환한다. 그렇지 않다면 다음 콜론 ":"에 이어지는 조건문 age<100을 검사한다.
    4. 그 결과가 참이면 '환영합니다!'를 반환한다. 그렇지 않다면 마지막 콜론 ":" 이후의 표현식인 '나이가 아주 많으시거나, 나이가 아닌 값을 입력 하셨군요!' 를 반환한다.

    if .. else 를 사용하면 위 예시를 아래와 같이 변형할 수 있다.

    부적절한 '?'

    물음표 ?를 if 대용으로 쓰는 경우가 종종 있다.

    조건 company == 'Netscape'의 검사 결과에 따라 ? 뒤에 이어지는 첫 번째 혹은 두 번째 표현식이 실행되어 얼럿 창이 뜬다.

    위 예시에선 평가 결과를 변수에 할당하지 않고, 결과에 따라 실행되는 표현식이 달라지도록 하였다.

    그런데 이런 식으로 물음표 연산자를 사용하는 것은 좋지 않다.

    개발자 입장에선 if문을 사용할 때 보다 코드 길이가 짧아진다는 점 때문에 물음표 ?를 if 대용으로 쓰는게 매력적일 순 있지만 이렇게 코드를 작성하면 가독성이 떨어진다.

    아래는 if를 사용해 변형한 코드이다. 어느 코드가 더 읽기 쉬운지 비교해보자.

    코드를 읽을 때 우리의 눈은 수직으로 움직인다. 수평으로 길게 늘어진 코드보단 여러 줄로 나뉘어 작성된 코드 블록이 더 읽기 쉽다.

    물음표 연산자 ?는 조건에 따라 변환 값을 달리하려는 목적으로 만들어졌다. 이런 목적에 부합하는 곳에 물음표를 사용하길 바란다. 여러 분기를 만들어 처리할 때는 if를 사용하자!

    profile
    안녕하세요

    0개의 댓글

    관련 채용 정보