"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 조지와 로버트가 술집에 들어가는데...

조지와 로버트가 술집에 들어가는데...

2024-08-01에 게시됨
검색:909

George and Robert walk into a bar...

제목이 여기에서 당신을 기다리고 있는 농담만 있는 것처럼 들릴 수도 있습니다(SEO 재난, 나도 알아요). 실망시켜서 죄송합니다. 이 게시물은 실제로 ES2021에 도입된 JavaScript의 논리적 할당 연산자에 관한 것입니다. 조지와 로버트가 이 사건과 어떤 관계인지 알아보려면 계속 읽어보세요...

역사적 배경

논리 할당 연산자는 본질적으로 부울 논리와 할당 작업이 혼합된 것입니다. 하지만 이러한 구성 요소에는 처음에 생각했던 것보다 더 많은 것이 있습니다.

한 가지, 대부분은 아니지만 많은 개발자들이 부울 논리가 현대 컴퓨팅 구조에 얼마나 깊이 얽혀 있는지 깨닫지 못할 수도 있습니다. 이는 컴퓨터 회로에서 코드의 조건문까지 확장됩니다.

우리는 등호를 매일 사용하는데, 종종 별 생각 없이 사용합니다. 현재 수학과 코딩 모두에서 중요한 역할을 하는 이 기호는 16세기에 수학적 목적으로 발명되었습니다. 약 400년 후인 1950년대에 컴퓨터 프로그래밍에 적용되었습니다.

이 역사적 맥락이 조금도 흥미롭지 않다면 논리 할당 연산자 이해 섹션으로 건너뛰셔도 됩니다. 아니면 저와 함께 과거로의 짧은 여행을 떠나보세요.

조지 부울

논리학에 대한 최초의 연구는 고대 그리스인, 특히 종종 "논리학의 아버지"라고 불리는 아리스토텔레스에 기인합니다. 그는 논리 연산자 사용의 토대를 마련한 공식 논리 시스템을 개발했습니다.

오늘날 우리가 알고 있는 논리 연산자의 실제 수학적 기초는 19세기 기호 논리의 출현과 함께 구체화되기 시작했습니다. 기호를 사용하여 논리적 형태와 구조를 표현하므로 더욱 복잡하고 추상적인 추론이 가능합니다.

19세기 영국의 수학자이자 논리학자인 조지 부울(George Boole)은 그의 주요 저서 "사고의 법칙"(1854)에서 논리에 대한 대수적 접근 방식을 도입했습니다. 여기서 값은 true 또는 false일 수 있으며 대수 연산과 유사하게 이러한 값에 대해 연산을 수행할 수 있습니다. 이 시스템에는 기본 논리 연산자가 포함되어 있습니다:

  • AND(접속사)
  • OR(분리)
  • NOT(부정)

Boole의 연구를 바탕으로 다른 수학자 및 논리학자들은 기호 논리학의 범위와 깊이를 확장했습니다. 그리고 20세기 중반에 컴퓨터 과학이라는 새로운 분야에서 새롭고 비옥한 기반을 찾았습니다. 부울 논리의 이진적 특성은 데이터가 일련의 0과 1로 표현될 수 있고 논리 연산자가 이 데이터의 흐름을 제어할 수 있는 컴퓨터 심장의 디지털 회로에 완벽하게 적합한 것으로 입증되었습니다.

논리 연산자는 프로그래밍 언어의 기본 부분이 되었으며, 소프트웨어에서 복잡한 계산 논리와 의사 결정 프로세스를 구성할 수 있게 되었습니다. 오늘날에는 거의 모든 프로그래밍 언어의 구문에 필수적입니다.

로버트 레코드

등호는 1557년 웨일스의 수학자 로버트 리코데(Robert Recorde)가 그의 저서 "위트의 숫돌(The Whetstone of Witte)"에서 처음 소개했습니다. Recorde는 자신의 작품에서 "같음"을 반복적으로 쓰는 것에 지쳐서 평등의 상징으로 같은 길이의 평행선 두 개를 선택했습니다. 그가 말했듯이, "두 가지 모두가 동등할 수는 없습니다." 이는 평등을 간결하고 명확하게 표현하는 방법을 제공하는 수학 표기법의 중요한 발전이었습니다.

프로그래밍 초기에는 특히 기계 코드와 어셈블리 언어의 경우 "할당"의 개념은 레지스터와 메모리 위치 간에 데이터를 저장하고 이동하는 것에 관한 것이었습니다. 기계가 이러한 작업을 수행하도록 지시하는 특정 opcode를 사용하여 지침이 제공되었습니다.

고급 프로그래밍 언어가 개발됨에 따라 변수에 값을 할당하는 작업을 표현하기 위해 보다 추상적이고 사람이 읽을 수 있는 방법이 필요했습니다. 이로 인해 1950년대 FORTRAN을 시작으로 여러 언어에서 등호를 할당 연산자로 채택하게 되었습니다.

할당에 =를 사용하면 평등이라는 수학적 의미가 모호해졌습니다. 이로 인해 프로그래밍 의도를 명확히 하기 위해 다양한 기호가 도입되었습니다.

  • 1960년대에 개발된 알골(Algol)은 동등 비교와 구별하기 위해 할당에 := 기호를 도입했습니다.
  • C는 나중에 할당에 =를 사용하고 동등성 테스트에 ==를 사용하는 것을 대중화했으며, 이는 많은 후속 언어가 따르는 규칙입니다.

시간이 지남에 따라 프로그래밍 언어에는 다양한 작업을 효율적으로 처리하기 위해 복합 할당 연산자(=, -= 등)와 최근에는 JavaScript의 논리 할당 연산자와 같은 다양한 형태의 할당 연산자가 도입되었습니다.

논리적 할당 연산자 이해

논리 할당 연산자는 할당(=)을 논리(&&, ||) 또는 null 병합(??) 연산자와 결합하는 JavaScript의 구문 설탕입니다. 세 가지 유형이 있습니다:

  • 논리 AND 할당(&&=): 왼쪽 변수가 참인 경우에만 오른쪽 값을 왼쪽 변수에 할당합니다.
  • 논리 OR 할당(||=): 왼쪽 변수가 거짓인 경우에만 오른쪽 값을 왼쪽 변수에 할당합니다.
  • Nullish Coalescing Assignment(??=): 왼쪽 변수가 Null이거나 정의되지 않은 경우에만 오른쪽 값을 왼쪽 변수에 할당합니다.

논리 AND 할당(&&=)

&&= 연산자는 변수가 현재 참값을 보유하고 있는 경우에만 변수 값을 설정하는 지름길입니다. 특정 조건이 true인 경우에만 작업을 진행해야 하는 시나리오에서 특히 유용합니다.

사용 사례 예시: 기능 전환

특정 기능을 관리자에게만 활성화해야 하는 시나리오를 상상해 보세요.

const isAdmin = user.isAdmin();
let canAccessDashboard = isAdmin;

canAccessDashboard &&= user.isAuthenticated();
console.log(canAccessDashboard); // true if user is authenticated, otherwise false

이 코드 조각은 isAdmin과 user.isAuthenticated()가 모두 true인 경우에만 canAccessDashboard가 true가 되도록 보장하여 두 가지 조건 뒤에 있는 기능을 효과적으로 보호합니다.

논리적 OR 할당(||=)

||= 연산자를 사용하면 변수에 현재 잘못된 값(예: null, 정의되지 않음, 0, false, "")이 있는 경우 변수에 값을 할당할 수 있습니다. 이는 기본값을 설정하는 데 매우 유용합니다.

사용 사례 예시: 기본값 설정

const userSettings = {
  theme: null,
};

// Set default theme if none is specified
userSettings.theme ||= "dark";
console.log(userSettings.theme); // Outputs 'dark'

이 연산자는 설정되지 않은 변수를 초기화하는 데 이상적이며, 0이나 false와 같이 잠재적으로 의미 있는 거짓 값을 덮어쓰지 않고 애플리케이션이 합리적인 기본값을 사용하도록 보장합니다.

Nullish 병합 할당(??=)

?? nullish 병합 연산자로 알려진 연산자는 비교적 최근에 프로그래밍 언어에 추가되었습니다. ES2021 사양에서는 논리 연산자를 기반으로 하지 않기 때문에 엄격한 의미에서 논리 할당 연산자로 분류하지 않습니다. 대신, 개발은 프로그래밍의 실제 요구 사항, 특히 명확하고 예측 가능한 방식으로 null 및 정의되지 않은 값을 처리하는 데 더 밀접하게 연결되어 있습니다.

??= 연산자는 변수가 현재 null이거나 정의되지 않은 경우에만 변수에 값을 할당하는 데 사용됩니다. 이는 다른 잘못된 값도 고려하는 ||= 연산자보다 더 정확합니다.

사용 사례 예시: 구성 기본값

const config = {
  timeout: 0,
};

config.timeout ??= 5000; // Set default timeout if not specified, i.e. undefined, or null
console.log(config.timeout); // Outputs 0, preserving the explicitly set falsy value

이 연산자는 0과 같은 거짓이지만 유효한 설정을 바꾸지 않고 기본값이 누락된 값만 채워야 하는 구성 및 설정에 특히 유용합니다.

실질적인 이점 및 고려 사항

if 또는 삼항 문 대신 논리적 할당 연산자를 사용하면 작성해야 하는 코드의 양이 줄어들고 다른 개발자에게 의도를 더 명확하게 전달할 수 있습니다. 많은 기능과 마찬가지로, 특히 코드 컨텍스트에서 유효한 잘못된 값을 처리할 때 이러한 연산자를 신중하게 사용하는 것이 핵심입니다.

추가 참고 사항

JavaScript에는 왼쪽 시프트 할당 연산자(

(Freepik에서 starline으로 상단 표지 이미지)

릴리스 선언문 이 글은 https://dev.to/codejet/george-and-robert-walk-into-a-bar-413e?1 에서 복제되었습니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3