7.논리 연산자(AND, OR, NOT)

✔️ 논리 연산자

자바스크립트에는 3종류의 논리 연산자가 있다.

  • || (OR)
  • && (AND)
  • ! (NOT)

📌 | |(OR)

여러개 중 하나라도 true면 true
즉, 모든값이 false 일때만 false를 반환한다.

📌 && (AND)

모든 값이 true면 true
즉, 하나라도 false면 false를 반환한다.

📌 ! (NOT)

true면 false
false면 true 를 반환한다.

!(NOT)은 true와 false값을 반대값으로 바꾸어준다!


✍ 논리 연산자가 들어간 문장 평가

스티븐 잡스는 한국인이 아니므로 모든 조건을 충족하지 않아 거짓이다!

뒤에 아무리 길게 작성하여도 남자라는 정보가 true이므로 뒤의 설명을 읽어보지도 않고 으로 간주한다!

마찬가지로 뒤에 아무리 길게 작성하여도 한국인 이라는 정보에서 이는 거짓이므로 false이다.

첫번째 거짓인 한국인 까지만 평가하고 이후는 무시한다.


실제 코드에서도 어떤 순서로 평가를 배치할지가 중요하다.
간단한 평가로 true, false를 먼저 판단할 수 있다면 복잡한 작업 전에 해주는 것이 좋다!

운전면허가 있고 시력이 좋은 여군을 평가에 따라 배열해보자!

데이터가 이렇다고 가정할 때 여군인데 시력이 좋고 운전면허가 있는 사람 순으로 코딩하는 것이 좋다!

왜냐하면 여군인 전체 군인의 7%이므로 나머지인 93퍼가 걸러지는 효과적인 방법이기 때문이다! 시간을 눈에 띄게 줄일 수 ㅇ (성능 최적화에 도움을 준다)


✔️ 논리 연산자 예시

🍀 | |(OR)의 경우

⌨︎ 입력

// OR
// 이름이 TOM 이거나, 성인이면 통과

const name = "Mike";
const age = 30;

if(name === 'Tom' || age > 19){
 console.log('통과');
}

💻 실행결과

"통과"

이름이 TOM이 아니지만 성인이기 때문에 통과
-> | |은 여러개의 조건중 한가지만 만족시켜도 true이기 때문.


🍀 &&(AND)의 경우

⌨︎ 입력

// AND
// 이름이 Mike 이고, 성인이면 통과
const name = "Mike";
const age = 30;

if(name === 'Mike' && age > 19){
 console.log('통과');
} else {
 console.log('돌아가.')
}

💻 실행결과

"통과"

AND 연산자를 사용했으므로 Mike이고 성인인 정보가 모두 참이여야 참으로 간주된다.
두 정보가 참이므로 참이다!

이번에는 조건을 바꾸어 다시 해당 코드를 실행해보겠다!

⌨︎ 입력

// AND
// 이름이 Mike 이고, 성인이면 통과

const name = "Mike";
const age = 10;

if(name === 'Mike' && age > 19){
 console.log('통과');
} else {
 console.log('돌아가')
}

💻 실행결과

"돌아가."

Name이 Mike인것은 맞지만 age가 10살로 성인이라는 조건을 충족하지 않기 때문에
돌아가.가 출력되는 것이다.

이름이 Mike가 아니어도 false값인 돌아가.가 출력된다.
해당 코드는 나이는 성인이지만 name이 "Tom"이기 때문에 "돌아가."가 출력되었다.

⌨︎ 입력

// AND
// 이름이 Mike 이고, 성인이면 통과

const name = "Tom";
const age = 30;

if(name === 'Mike' && age > 19){
 console.log('통과');
} else {
 console.log('돌아가')
}

💻 실행결과

"돌아가."

🍀 !(NOT)의 경우

⌨︎ 입력

// NOT
// 나이를 입력받아 성인 아니면 돌아가라고..

const age = prompt('나이가..?');
const isAdult = age > 19;

if(!isAdult) {
 console.log('돌아가..')
}

!(NOT)true이면 false를 false이면 true를 출력한다는 점을 기억하여야한다!

위 코드는 prompt창에서 나이를 입력받고 그 나이가 19세 초과(성인)가 아니면
"돌아가." 를 반환하는 코드이다.

💻 실행결과

19 미만의 숫자를 입력하였을 시 돌아가..를 반환한다.


이번에는 20초과의 숫자를 입력해보자!

⌨︎ 입력

// NOT
// 나이를 입력받아 성인 아니면 돌아가라고..

const age = prompt('나이가..?');
const isAdult = age > 19;

if(!isAdult){
 console.log('돌아가..')
}

console.log('-----------------------')

💻 실행결과

If문 조건에 해당되지 않으므로 다른 문장이 출력됨을 확인할 수 있다.


✔️ 우선순위

📌 비교연산자에도 우선순위가 있다.

💜 AND > OR

⌨︎ 입력

// 우선순위
// 남자이고, 이름이 Mike 이거나 성인이면 통과

const gender = 'F';
const name = 'Jane';
const isAdult = true;

if(gender === 'M' && name === 'Mike' || isAdult){
 console.log('통과')
} else {
 console.log('돌아가.')
}

💻 실행결과

"통과"

왜 통과라는 결과가 나왔을까??

gender가 남자도 아니고 name이 Mike도 아니지만
And가 Or보다 우선순위가 더 높아서 먼저 평가된것이다.

우선순위가 높다는 의미는 위와 같이 두개 이상의 연산자가 있는 식이있고, 괄호가 없을 때 우선순위가 높은 And 먼저 계산해준다는 뜻이다! Or는 그다음에!

if((gender === ‘M’ && name === ‘mike’) || isAdult) 

따라서 이렇게 볼 수 있고
괄호 안을 처리하면

if(false || isAdult)

이 식이 나오는데
연산자가 두개 이상 일때는 우선순위에 있는 애들끼리 괄호가 있다고 생각하면 편리하다.

즉 gender === 'M' && name === 'Mike' 이부분(AND)이 먼저 평가되고
| | isAdult부분(OR)이 나중에 평가가 된 것이다.

성인이면 무조건 isAdult부분에서 true가 되기 때문에 다 통과가 된것이다.

위 코드는

⌨︎ 입력

// 우선순위
// 남자이고, 이름이 Mike 이거나 성인이면 통과

const gender = 'F';
const name = 'Jane';
const isAdult = true;

// if(gender === 'M' && name === 'Mike' || isAdult){
if((gender === 'M' && name === 'Mike') || isAdult){
	console.log('통과')
} else {
  console.log('돌아가.')
}

이 코드와 같다!

의도한 바 대로 묶어주면 다음과 같다.

⌨︎ 입력

if(gender === 'M' && (name === 'Mike' || isAdult)){
	console.log('통과')
}	else {
	console.log('돌아가.')
}

남자이고 동시에 (이름이 Mike이거나 성인)

💻 실행결과

"돌아가."

이렇게 됬을시에는 gender=F 부분이 충족이 되지 않으므로 false값인 "돌아가."를 반환하는 것이다.


그렇다면 gender의 조건을 M으로 변경해보자.

⌨︎ 입력

// 우선순위
// 남자이고, 이름이 Mike 이거나 성인이면 통과

const gender = "M";
const name = 'Jane';
const isAdult = true;

// if(gender === 'M' && name === 'Mike' || isAdult){
if(gender === 'M' && (name === 'Mike' || isAdult)){
 console.log('통과')
} else {
console.log('돌아가.')
}
}

💻 실행결과

"통과"

M으로 변경한 결과 gender부분이 일치(true)하고 or부분의 한조건만 충족(true)하므로 true값인 "통과"가 나오는 것이다!

좋은 웹페이지 즐겨찾기