[JS] 단축평가 | 난해하지만 편하다
- 프론트/자바스크립트
- 2024. 8. 15.
단축평가
자바스크립트에서 단축평가란 논리합(`||`) 또는 논리곱(`&&`)을 사용하여 조건식을 판별하는 과정에서 연산을 조기에 종료하는 것이다. 모든 조건을 판별하지 않고 최종 결과가 나오는 경우에 판별을 중단한다.
💡좌변, 우변
논리연산자의 단축 평가를 알아 보기 전에 좌변, 우변의 개념부터 알아야 한다. 아주 간단하다. 논리연산자의 왼쪽에 있는 것을 좌변, 오른족에 있는 것을 우변이라고 칭한다.
true || console.log('좌변이 false일 때 찍힘')
위 예시에서 `true`는 좌변, `console.log()` 는 우변이다. 그럼 본격적으로 각 연산자의 단축평가 방식을 살펴보자.
💡 논리합(OR) 단축평가
`||` (OR) 연산자는 좌변이 참(truthy)일 경우 전체 표현식의 결과가 참이 되므로 바로 판별을 종료하고 그 값을 반환한다. (이후의 표현식은 판별하지 않는다.) 왜 그렇게 되는지 텍스트로만 전달하면 오잉? 할수도 있기 때문에 아래 예시를 통해 다시 한번 살펴봅시다.
if(true || false)
예시를 보니 이해하기 좀 더 수월하다. 단축평가를 알기 전에는 조건문에서 OR, AND 상관 없이 "모든 피연산자 중 하나라도" 라고 생각하며 모든 피연산자를 끝까지 평가한다고 생각했었는데 실제로는 왼쪽부터 순서대로 평가하면서 `true`를 만나면 그 시점에서 평가를 종료하는 방식으로 동작한다.
조건문이 아닌 곳에서 논리합
a = true || 'ㅋㅋ' // true
a = false || 'ㅋㅋ' // 'ㅋㅋ'
a = false || 0 // 0
- `true || 'ㅋㅋ'`: 좌변의 값이 참(truthy)이기 때문에 판별을 종료하고 좌변값(`true`) 반환
- `false || 'ㅋㅋ'`: 좌변의 값이 거짓(falsy)이기 때문에 그 다음 표현식(우변)을 판별, 우변의 값이 참(truthy)이기 때문에 우변값(`'ㅋㅋ'`) 반환
- 모든 조건이 false일 경우 가장 마지막 값 반환
피연산자의 수는 제한 없음
a = false || 0 || null || 'ㅎㅇ' || '' // ㅎㅇ
- 같은 방식으로 동작
- 4번째 피 연산자의 값이 참(truthy)이기 때문에 `'ㅎㅇ'` 반환
함수실행 가능
// `그냥 코드 실행해버리기` 출력
false || 0 || null || console.log('그냥 코드 실행해버리기')|| ''
// `b: 하이` 출력
b = false || 0 || null || function () { console.log('b: 하이') } || ''
b() // b는 이제 함수로 살아야됨
- 일반적인 원시 데이터 뿐만 아니라 코드 자체를 실행할 수도 있고, 함수같은걸 저장할 수도 있음
- `console.log()` 같은 코드도 바로 실행 가능함
- 함수 같은 걸 `b`에 저장할 수도 있음
논리합(OR) 정리
- 피연산자를 좌측부터 판별
- 피연산자의 개수에는 제한이 없다 (하지만 2개 이상 사용할 일이 있을지는 모른다)
- 첫 번째 만나는 `truthy`값 반환(실행)
- 모든 값이 `falsy`값 일 경우 가장 마지막 피연산자의 결과가 반환
💡 논리곱(AND) 단축평가
`&&` (AND) 연산자는 반대로 하나라도 거짓일 경우 판별을 종료한다. 따라서 거짓을 만나게 되면 그 즉시 반환(실행)하고 종료된다. 모든 값이 `truthy`값일 경우 마지막 피연산자의 결과가 반환 된다.
a = true && 'a'
console.log(a); // a
a = false && 'a'
console.log(a); // false
이 외의 OR과 비슷한 예시는 생략 (걍 반대임)
&& 연산자 실제 사용 예시
어떤 변수의 값이 `truthy`한 경우에 뒤에 실행할 코드를 작성하는 경우가 많다. 우리와 친한 `if`문을 사용해도 되지만 단축평가 기법을 사용하면 더 간결하게 코드 실행이 가능하다.
대충 `userId`가 존재할 경우 실행되는 코드가 있다고 가정해보자.
userId = '유저1'
if(userId){
save(userId)
}
`if`문은 정석이자 근본적인 방법이지만 코드를 더 줄일 수 있는 방법이 있다.
userId = "유저1"
userId && save(userId);
`userId`가 `truthy`값일 경우 코드가 실행된다. 웹개발에서 이런 로직이 굉장히 많이 사용되는데 눈에만 익는다면 코드가 훨씬 간결해져서 마음이 편안 할 것이다.. 진작 공부해서 알아둘걸..
'프론트 > 자바스크립트' 카테고리의 다른 글
[불어나는 코드 모듈로 분리] - 1차 팀프로젝트 리팩토링 #네 번째 (0) | 2024.08.22 |
---|---|
[JS] 종속되지 않은 파일끼리 데이터 공유하는 방법 (with. window객체, 세션 등) (0) | 2024.08.16 |
[JS] if문 쓰기 귀찮을 때 | truthy, falsy 구분 (0) | 2024.08.14 |
[JS] 매개변수 배열로 묶어서 받기 | Rest 문법 (0) | 2024.08.13 |
[JS] 매개변수가 많아질 때 고민 | 구조 분해 할당 #객체편 (0) | 2024.08.09 |