공통

and는 둘 다 참이어야 참이고, or은 한 쪽만 참이어도 참이 됩니다. 이의 없으시죠?

이건 일부러 언어를 이상하게 만들지 않은 이상 어떤 언어든 공통입니다.

하지만 C/C++, 자바의 and/or과 자바스크립트/파이썬의 and/or은 좀 많이 다릅니다.

C/C++, 자바 등

C/C++, 자바 등에서는 참이면 1이나 true, 거짓이면 0이나 false가 됩니다.

예를 들어 true || 01이나 true, true && 00이나 false가 되는 것이죠.

편의상 0이 아닌 것을 true로, 0false로 표현하면 아래와 같은 표가 만들어집니다.

AND true false
true true false
false false false
OR true false
true true true
false true false

자바스크립트, 파이썬 등

자바스크립트와 파이썬에서는 and와 or의 의미가 다릅니다. 우선 표부터 보시죠.

A and B 결과
A = true B
A = false A
A or B 결과
A = true A
A = false B

A and BA가 참으로 평가되는 값이면 B, 거짓으로 평가되는 값이면 A가 되고,

A or BA가 참으로 평가되는 값이면 A, 거짓으로 평가되는 값이면 B가 됩니다.

그러니까 **A and BA ? B : A, A or BA ? A : B와 완벽히 같다**는 의미죠.

뭔가 이상한데?

뭔가 이상하다고 생각할 수 있지만, 결과적으로 이상할 게 없습니다.

and는 둘 다 참이어야 참이고, or은 한 쪽만 참이어도 참이 됩니다. 이의 없으시죠?

이 말이 맞는지 확인해보겠습니다.

A and B B가 true B가 100 (true) B가 false B가 0 (false)
A가 true true 100 (true) false 0 (false)
A가 100 (true) true 100 (true) false 0 (false)
A가 false false false false false
A가 0 (false) 0 (false) 0 (false) 0 (false) 0 (false)
A or B B가 true B가 100 (true) B가 false B가 0 (false)
A가 true true true true true
A가 100 (true) 100 (true) 100 (true) 100 (true) 100 (true)
A가 false true 100 (true) false 0 (false)
A가 0 (false) true 100 (true) false 0 (false)

...아무튼 그럼 결과적으로 맞죠. 문제 없죠?

and/or 활용

이런 and/or을 활용하면 짧고 가독성 좋은 코드를 쉽게 작성할 수 있습니다.

예를 들어 기본값을 제공하는 데 || 연산자를 사용할 수~~~~ 있습니다.

const Profile = ({ name, profileImage }) => (
    <div className={style.profile}>
        <ProfileImage src={profileImage || defaultProfileImage} />
        <Name name={name || "익명 사용자"} />
    </div>
);

그리고, **A and BA ? B : A, A or BA ? A : B와 완벽히 같다**고 했으니

이를 반대로 이용해서 이런 경우의 삼항 연산자를 and나 or로 대체할 수도 있습니다!