언어 및 도구들 공부/React

JS, JSX && || 단축 평가

Dr.Mlem 2024. 11. 19. 17:12
import React from "react";

const If2 = () => {
    const isLogin = true; // 트/팔로 껐다 켯다 할 수 있음

    return(
        <div>
            <h1>If2</h1>

            {isLogin && <p>로그인 되었느뇽?</p>}
        </div>
    );
};

export default If2;

Q1.

이 코드에서, {isLogin && <p>로그인 되었느뇽?</p>} 이렇게 쓰는 것은, 그냥 JS 혹은 JSX 스타일의 연산방법인거야?

 

 

A1.

네, {isLogin && <p>로그인 되었느뇽?</p>}는 JSX 스타일로 JavaScript의 논리 연산자(&&)를 활용한 표현식입니다. 이를 이해하기 위해 JSX와 JavaScript의 관계를 함께 살펴보겠습니다.


JavaScript에서의 && 연산자

&&는 JavaScript에서 논리 AND 연산자로 동작합니다. 두 값이 모두 true일 경우, 마지막 값을 반환합니다.

예를 들어:

true && "Hello" // "Hello"
false && "Hello" // false

위의 결과는 JavaScript의 단축 평가(short-circuit evaluation)로 인해 발생합니다. 첫 번째 값이 false라면 뒤의 값은 평가되지 않으므로 그대로 반환됩니다.


JSX에서의 활용

JSX에서는 JavaScript 표현식을 {}로 감싸서 사용할 수 있습니다. 따라서 {isLogin && <p>로그인 되었느뇽?</p>}는 다음처럼 동작합니다:

  1. isLogin이 true인 경우:
    • true && <p>로그인 되었느뇽?</p>는 <p>로그인 되었느뇽?</p>를 반환하므로, 이 JSX 태그가 렌더링됩니다.
  2. isLogin이 false인 경우:
    • false && <p>로그인 되었느뇽?</p>는 false를 반환하므로, 아무것도 렌더링되지 않습니다.

왜 이렇게 쓰는가?

React에서 조건부 렌더링을 간결하게 작성하기 위해 이 방법을 많이 사용합니다. 만약 전통적인 if 문으로 구현하려면 코드가 더 복잡해질 수 있습니다.

예시로 같은 기능을 if 문으로 구현하면:

const If2 = () => {
    const isLogin = true;

    return (
        <div>
            <h1>If2</h1>
            {isLogin ? <p>로그인 되었느뇽?</p> : null}
        </div>
    );
};

&&를 사용하면 조건이 참일 때만 실행되는 표현식으로 간단히 작성 가능합니다.


정리

  • JSX 스타일로 작성한 코드지만, 본질은 JavaScript의 && 논리 연산자입니다.
  • 조건부 렌더링을 간단히 표현하기 위해 자주 쓰이는 패턴입니다.
  • 조건이 참일 때만 렌더링하고, 그렇지 않으면 아무것도 렌더링하지 않을 경우 유용합니다.

이 방법 외에도 ? : 삼항 연산자나 if 문을 활용한 조건부 렌더링 방식도 존재합니다. 상황에 맞게 선택하세요! 😊

 

 

 

Q2.

true && <p>로그인 되었느뇽?</p>는

<p>로그인 되었느뇽?</p>를 어째서 반환하는거지?

and 연산자는 a and b 에서, a, b 조건이 둘 다 참인지에 대해서 판단만 하는 연산자가 아닌가?

 

 

 

A2.

좋은 질문이에요! && 연산자는 단순히 조건을 "판단"하는 연산자일 뿐 아니라, **단축 평가(short-circuit evaluation)**라는 특성 때문에 결과값을 반환합니다. 이 특성을 제대로 이해하면 true && <p>로그인 되었느뇽?</p>가 <p>로그인 되었느뇽?</p>를 반환하는 이유를 알 수 있습니다.


&& 연산자의 동작 방식

a && b에서 && 연산자는 다음과 같이 동작합니다:

  1. a를 평가한다.
    • a가 false로 평가되면, b는 아예 평가하지 않고 a를 반환합니다. (즉, 단축 평가가 일어납니다.)
    • 예: false && "hello" → false
  2. a가 true로 평가되면, b를 평가한다.
    • 이 경우 b의 값이 최종 결과로 반환됩니다.
    • 예: true && "hello" → "hello"

React JSX와 &&의 조합

JSX에서 {true && <p>로그인 되었느뇽?</p>}는 JavaScript의 표현식이기 때문에 다음과 같은 과정으로 동작합니다:

  1. isLogin이 true이므로, 첫 번째 피연산자인 true는 true로 평가됩니다.
  2. 따라서 두 번째 피연산자인 <p>로그인 되었느뇽?</p>가 평가됩니다.
  3. 최종적으로 <p>로그인 되었느뇽?</p>가 반환되어 렌더링됩니다.

단축 평가 예제

다양한 상황에서 &&의 동작을 실험해 보면 이해가 더 잘 될 거예요.

console.log(true && "Hello"); // "Hello" 반환
console.log(false && "Hello"); // false 반환
console.log(true && 123); // 123 반환
console.log(false && 123); // false 반환
 

왜 a && b가 값을 반환할까?

&&는 논리 연산자이지만, JavaScript에서는 값을 반환하기도 합니다. 이를 단축 평가라고 부르며, 효율성을 위해 도입된 개념입니다.

  1. a가 false라면, b를 평가하지 않아도 결과는 false라는 걸 이미 알고 있습니다. 따라서 a를 반환합니다.
  2. a가 true라면, 결과는 전적으로 b에 달려 있으므로 b를 평가하고 반환합니다.

결론

true && <p>로그인 되었느뇽?</p>는 다음과 같은 원리로 작동합니다:

  1. 첫 번째 값인 true가 참이므로 두 번째 값 <p>로그인 되었느뇽?</p>를 평가합니다.
  2. <p>로그인 되었느뇽?</p>는 JSX 요소이며 유효한 값이기 때문에 반환됩니다.
  3. 최종적으로 React가 이 반환된 값을 화면에 렌더링합니다.

이렇게 React의 조건부 렌더링에서 && 연산자가 자주 쓰이는 이유는 단순하면서도 직관적인 조건부 평가가 가능하기 때문입니다. 😊

 

 

 

Q3.

결국, &&가 단순한 and 연산자가 아니기에, true && ??? 이 경우에는, ??? 자리에 참 또는 거짓의 값이 오는것이 아닌 이상, 뒤의 값을 출력하는 기능 또한 있는 것인가?

 

 

 

A3.

네, 정확히 이해하셨습니다! 🎉

&& 연산자는 단순히 "둘 다 참인가?"를 판단하는 논리 연산자 역할뿐 아니라, 단축 평가(short-circuit evaluation)를 통해 뒤에 오는 값을 반환할 수도 있는 기능을 가지고 있습니다. JavaScript의 특성 중 하나입니다.


정리하자면:

  1. true && ???의 경우:
    • true는 평가된 값이므로, 다음 값을 검사하고 반환합니다.
    • 이때, ???가 어떤 값이든 그 값을 그대로 반환합니다.
      • 예: true && "Hello" → "Hello"
      • 예: true && <div>JSX</div> → <div>JSX</div>
  2. false && ???의 경우:
    • false가 평가된 순간, 결과는 이미 결정났기 때문에 ???를 아예 평가하지 않고 false를 반환합니다.
      • 예: false && "Hello" → false
      • 예: false && <div>JSX</div> → false

왜 이런 결과가 나오나?

&& 연산자는 JavaScript에서 다음처럼 동작합니다:

  1. 왼쪽 피연산자(a)를 평가합니다.
  2. 왼쪽 피연산자가 false라면, 더 이상 평가할 필요가 없으므로 왼쪽 값을 반환합니다.
  3. 왼쪽 피연산자가 true라면, 오른쪽 피연산자를 평가하고 그 값을 반환합니다.

즉, &&는 "앞이 거짓이면 더 보지 말고 앞의 값을 반환하고, 앞이 참이면 뒤를 평가해서 결과를 내라"는 식으로 동작합니다.


React JSX에서 true && ??? 활용

React에서 이 특성을 활용하면 다음과 같이 조건부 렌더링이 가능합니다:

코드 예제:

const Example = () => {
  const isLoggedIn = true; // 조건이 true

  return (
    <div>
      <h1>Hello!</h1>
      {isLoggedIn && <p>로그인 되었어요!</p>} {/* isLoggedIn이 true면 <p>...</p> 렌더링 */}
    </div>
  );
};

실행 결과:

  • **isLoggedIn이 true**일 때:
    • true && <p>로그인 되었어요!</p> → <p>로그인 되었어요!</p>를 반환하고 렌더링.
  • **isLoggedIn이 false**일 때:
    • false && <p>로그인 되었어요!</p> → 아무것도 렌더링되지 않음.

결론

&&는 단순히 논리 연산을 판단하는 것 외에:

  1. 단축 평가로 값을 반환할 수 있는 특성이 있습니다.
  2. React에서 이를 활용해 조건부 렌더링을 간단히 구현할 수 있습니다.

즉, true && ???에서 true는 뒤의 값을 평가하고 그대로 반환하는 "게이트 역할"을 한다고 볼 수 있어요! 😊

 

 

 

Q4.

||도 비슷한 특성이 있는거고?

 

 

 

A4.

네, 맞습니다! || 연산자도 &&와 유사하게 **단축 평가(short-circuit evaluation)**를 수행합니다. 다만, 작동 방식이 약간 다릅니다. ||는 OR 연산자로, 다음 규칙에 따라 동작합니다:


||의 동작 방식

  1. 왼쪽 피연산자(a)를 평가한다.
    • a가 truthy(참 같은 값)라면, a를 반환하고 끝냅니다. 오른쪽 값은 평가하지 않습니다.
    • a가 falsy(거짓 같은 값)라면, 오른쪽 피연산자(b)를 평가하고 반환합니다.

Truthy와 Falsy

JavaScript에서 값이 참 또는 거짓으로 평가되는 기준은 다음과 같습니다:

  • Falsy 값:
    • false, 0, "" (빈 문자열), null, undefined, NaN
  • Truthy 값:
    • 위에 나열되지 않은 모든 값 (예: true, "hello", 123, [], {}, <div /> 등)

예제

 

Truthy 왼쪽 값:

console.log(true || "Hello"); // true
console.log("Hi" || "Hello"); // "Hi" (왼쪽이 truthy이므로 그대로 반환)
 

Falsy 왼쪽 값:

console.log(false || "Hello"); // "Hello" (왼쪽이 falsy, 오른쪽 평가 후 반환)
console.log(null || "Default"); // "Default"
console.log(0 || 42); // 42

 

둘 다 Falsy:

console.log(false || null); // null (왼쪽은 falsy, 오른쪽 평가 후 반환)
console.log(0 || ""); // "" (둘 다 falsy, 마지막 값을 반환)

||와 조건부 렌더링

React JSX에서도 ||를 활용하여 조건부 렌더링을 간단히 처리할 수 있습니다. 보통 "기본값 설정" 같은 상황에서 유용합니다.

예제 1: 기본값 렌더링

const Example = () => {
  const username = ""; // falsy 값

  return (
    <div>
      <h1>{username || "Guest"}</h1>
    </div>
  );
};
  • username이 빈 문자열("")이라 falsy로 평가됩니다.
  • 따라서 "Guest"가 반환되어 렌더링됩니다.

예제 2: 대체 렌더링

const Example = () => {
  const isLoggedIn = false;

  return (
    <div>
      <h1>{isLoggedIn || <p>로그인 필요!</p>}</h1>
    </div>
  );
};
  • isLoggedIn이 false라 falsy로 평가됩니다.
  • <p>로그인 필요!</p>가 반환되어 렌더링됩니다.

&&와 || 비교

연산자 동작원리 사용 예

 

&& 왼쪽이 truthy일 때만 오른쪽 평가 isLoggedIn && <p>Welcome!</p>
`   `

결론

  • ||는 왼쪽이 falsy일 때만 오른쪽 값을 평가하고 반환합니다.
  • React에서 기본값 설정이나 대체 렌더링을 간단히 처리하는 데 유용합니다.
  • &&와 함께 사용하면 상황에 맞는 조건부 로직을 깔끔하게 표현할 수 있습니다.

😊 이제 &&와 ||를 자유롭게 활용해 보세요!