공통
and는 둘 다 참이어야 참이고, or은 한 쪽만 참이어도 참이 됩니다. 이의 없으시죠?
이건 일부러 언어를 이상하게 만들지 않은 이상 어떤 언어든 공통입니다.
하지만 C/C++, 자바의 and/or과 자바스크립트/파이썬의 and/or은 좀 많이 다릅니다.
C/C++, 자바 등
C/C++, 자바 등에서는 참이면 1이나 true, 거짓이면 0이나 false가 됩니다.
예를 들어 true || 0는 1이나 true, true && 0은 0이나 false가 되는 것이죠.
편의상 0이 아닌 것을 true로, 0을 false로 표현하면 아래와 같은 표가 만들어집니다.
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 B는 A가 참으로 평가되는 값이면 B, 거짓으로 평가되는 값이면 A가 되고,
A or B는 A가 참으로 평가되는 값이면 A, 거짓으로 평가되는 값이면 B가 됩니다.
그러니까 A and B는 A ? B : A, A or B는 A ? 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>
);
JavaScript
복사
자바스크립트에서 || 연산자를 효과적으로 활용하는 예시...이지만 실제로는 ?? 연산자 쓰세요
그리고, A and B는 A ? B : A, A or B는 A ? A : B와 완벽히 같다고 했으니
이를 반대로 이용해서 이런 경우의 삼항 연산자를 and나 or로 대체할 수도 있습니다!