[JS Deep Dive] 9장 정리 - 타입 변환과 단축 평가에 대하여
·
Study/Modern JS Deep Dive
명시적 타입 변환(타입 캐스팅): 개발자가 의도적으로 값의 타입을 변환하는 것암묵적 타입 변환(타입 강제 변환): 개발자의 의도와는 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것 원시 값은 변경 불가능한 값이므로 변경할 수 없음→ 타입 변환이란 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것 암묵적 타입 변환은 기존 변수 값을 재할당하여 변경하는 것이 아님→ 피연산자의 값을 암묵적 타입 변환해 새로운 타입의 값을 만들어 단 한 번 사용하고 버림 둘 중에 뭐를 더 많이 써야되는 것이 중요한 것이 아닌, 코드를 예측할 수 있어야 한다는 것이 중요암묵적 타입 변환 문자열 타입으로 변환(+)문자열 연결 연산자의 모든 피연산자는 코드의 문맥상 모..
[JS Deep Dive] 6,7,8장 정리 - 데이터 타입, 연산자, 제어문에 대하여
·
Study/Modern JS Deep Dive
6장 - 데이터 타입데이터 타입은 값의 종류를 말한다.자바스크립트(ES6)는 7개의 데이터 타입을 제공 원시 타입숫자 타입(number) → 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재문자열 타입(string) → 문자열불리언 타입(boolean) → 논리적 참과 거짓undefined 타입 → var 키워드로 선언된 변수에 암묵적으로 할당되는 값null 타입 → 값이 없다는 것을 의도적으로 명시할 때 사용하는 값심벌 타입(symbol) → ES6에서 추가된 7번째 타입 객체 타입객체, 함수, 배열 등숫자 타입자바스크립트는 독특하게 하나의 숫자 타입만 존재한다. ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따름→ 모든 수를 실수로 처리, 정수만 표현하기..
[JS Deep Dive] 4,5장 정리 - 변수, 표현식과 문에 대하여
·
Study/Modern JS Deep Dive
4장- 변수‘10 + 20’ 자바스크립트 코드를 계산(평가 하려면),10, 20, +라는 기호(리터럴과 연산자)의 의미를 알고 있어야 하며10 + 20이라는 식(표현식)의 의미도 해석(파싱)할 수 있어야 한다.자바스크립트 엔진이 10 + 20이라는 식의 의미를 해석하면 + 연산을 수행하기 위해 먼저 + 연산자의 좌변과 우변의 숫자 값, 피연산자를 기억한다.→ 이 때 컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용해 데이터를 기억한다. 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체 메모리 셀 하나의 크기는 1바이트(8비트) 컴퓨터는 메모리 셀의 크기, 즉 1바이트 단위로 데이터를 저장하거나 읽어들임 각 셀은 고유의 메모리 주소를 가짐→ 메모리 공간의 위치를 나타냄(0부터 시작, 메모리의 크기만큼 ..
[JS Deep Dive] 1,2,3장 정리 - 프로그래밍과 자바스크립트에 대하여
·
Study/Modern JS Deep Dive
1장 - 프로그래밍프로그래밍이란 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다.→ 0과 1밖에 알지 못하는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업 문제 해결 방안을 고려할 때 컴퓨터의 입장에서 문제를 바라봐야하는데, 이때 필요한 것이 컴퓨팅 사고(Computational thinking)이다. 기계어로 직접 명령을 전달하는 것을 대신할 가장 유용한 대안은사람이 이해할 수 있는 약속된 구문으로 구성된 프로그래밍 언어를 사용해 프로그램을 작성 한 후, 그것을 컴퓨터가 이해할 수 있는 기계어로 변환하는 일종의 번역기(컴파일러, 인터프리터)를 이용하는 것이다. 프로그래밍 언어는 구문(syntax)와 의미(semantics)의 조합으로 표현된다. 문법을 잘 안다고 해서 외국어..
[시스템프로그래밍] 임계구역과 세마포어에 관하여
·
Study/시스템프로그래밍
Critical Sections(임계 구역) 상호 배타적으로 실행되어야 하는 코드 세그먼트 공유 장치(Shared devices)는 한 번에 한 프로세스에서 액세스해야 하므로 배타적 자원(exclusive resources)이라고 불림. 코드의 중요한 부분들 Entry Section(진입 구역) 공유 변수 또는 다른 자원을 수정할 권한을 요청하는 코드를 포함한다. Critical Section(임계 구역) 공유 자원에 액세스하거나 재진입할 수 없는 코드를 실행하는 코드를 포함한다. Exit Section(나가는 구역) Entry Section이 다음 실행 쓰레드가 임계 구역에 들어갈 수 있음을 알 수 있어야 해서 필요 Remainder Section(나머지 구역) 액세스를 해제한 후, 스레드는 실행할 다..
[시스템프로그래밍] 조건 변수와 시그널, Reader-Writer problem에 관하여
·
Study/시스템프로그래밍
Busy waiting while( x != y ); Non-busy waiting 해결책 Mutex를 잠그기 조건 x == y를 테스트 참이면 mutex를 잠금 해제하고 루프를 종료 거짓이면 스레드를 일시 중단하고 mutex를 잠금 해제 Mutex는 데이터에 대한 스레드 액세스를 제어하여 동기화를 구현하지만 조건 변수는 실제 데이터 값에 기반하여 스레드를 동기화할 수 있게 함. 만약 조건 변수가 없다면, 프로그래머는 계속해서 조건이 충족되었는지 확인하기 위해 스레드를 폴링(가능하면 임계 구역에서) 이는 스레드가 이 활동에 계속해서 바쁘게 차지되어 매우 자원 소모적일 수 있음. 조건 변수는 폴링 없이 동일한 목표를 달성하기 위한 방법 조건 변수는 항상 Mutex 락과 함께 사용 조건 변수 : 임의의 조건..
[시스템프로그래밍] Mutex에 관하여
·
Study/시스템프로그래밍
Mutex는 스레드 동기화를 구현하고 여러 쓰기가 발생할 때 공유 데이터를 보호하는 주요 수단 공유 데이터 리소스에 대한 액세스를 보호하는 잠금 역할 한 번에 하나의 스레드만 mutex 변수를 잠그거나 소유할 수 있다. 따라서 여러 스레드가 mutex를 잠그려고 해도 하나의 스레드만 성공 소유한 스레드가 해당 mutex를 잠금 해제할 때까지 다른 스레드는 해당 mutex 소유 불가능 스레드는 보호된 데이터에 번갈아가며 액세스해야 Mutex는 race condition을 방지하는 데 사용 Mutex 소유 → 전역 변수 업데이트 업데이트되는 변수 → critical section에 속함 Mutex를 사용하는 것은 프로그래머의 책임! Mutex 실행 순서 Mutex 변수 생성 후 초기화 여러 스레드가 mute..
[시스템프로그래밍] 스레드
·
Study/시스템프로그래밍
스레드의 장점 비동기 이벤트를 효율적으로 처리할 수 있다. 공유 메모리 다중프로세서에서 병렬 성능을 얻을 수 있다. 각 스레드는 스택과 CPU 상태(즉, 레지스터)로 구성된 실행 단위 Multiple 스레드는 Multiple 프로세스와 유사하지만, 작업 내의 여러 스레드는 동일한 코드, 전역 변수 및 힙을 사용. Unix에서 두 개의 프로세스는 운영 체제를 통해서만 통신 가능 (예: 파일, 파이프, 소켓) 그러나 작업 내의 두 스레드는 메모리를 통해 통신 가능 스레드를 사용하여 프로그램을 작성할 때, 이들이 동시에 실행된다고 가정한다. 각 스레드가 자체 CPU에서 실행되는 것처럼 보여야 하며, 모든 스레드가 동일한 메모리를 공유하는 것처럼 보여야 한다. 멀티태스킹 단일 프로세서에서 멀티스레딩은 일반적으로..
[시스템프로그래밍] 시간과 타이머
·
Study/시스템프로그래밍
POSIX Times 시스템은 Epoch 이후로 경과한 시간을 초 단위로 유지해야 Epoch은 세계 표준시 (Coordinated Universal Time, UTC, Greenwich Mean Time 또는 GMT로 불리기도 함) 기준으로 1970년 1월 1일 자정 00:00으로 정의됨 POSIX는 구현이 시스템 시간을 실제 시간과 날짜에 어떻게 정렬해야 하는지 명시 X #include time_t time(time_t *tloc); 시스템 시간에 접근한다 (Epoch 이후로 경과한 시간을 초 단위로 표현). tloc: NULL이 아닌 경우, 함수는 시간을 *tloc에 저장 time_t: long 형식 성공한 경우, Epoch 이후로 경과한 초의 수 반환 실패한 경우, (time_t)-1 반환 → 필수..
[시스템프로그래밍] Signals
·
Study/시스템프로그래밍
signal은 이벤트가 일어났을 때 발생했다는 사실을 프로세스에게 전달해주는 software notification다. 명령어 kill을 주면 목적지로 시그널을 준다. -l option은 available symbolic signal names의 list들을 준다. 프로세스는 도착한 시그널에 대해서 처리를 해줘야한다. → 시그널이 왔을 때 프로세스가 취해줘야 되는 default action이 있다. 터미널에서 ctrl+c → interrupt signal이 발생해서 지금 돌고 있는 프로세스에게 전달이 된다. 그러면 프로세스는 하던 작업을 멈추고 default action을 수행한다.(여기서는 강제 종료) Generating Signals #include int kill(pid_t pid, int sig)..