Search
Duplicate
🔣

자바스크립트/파이썬의 and와 or

간단소개
0 or 1true가 아니고 1이냐고요? 비트연산이라서? 땡!
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Javascript
Python
Scrap
태그
c언어
c++
javascript
python
short-circuit evaluation
개발지식
Java
9 more properties

공통

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> );
JavaScript
복사
자바스크립트에서 || 연산자를 효과적으로 활용하는 예시...이지만 실제로는 ?? 연산자 쓰세요
그리고, A and BA ? B : A, A or BA ? A : B와 완벽히 같다고 했으니
이를 반대로 이용해서 이런 경우의 삼항 연산자를 and나 or로 대체할 수도 있습니다!