본문 바로가기

전체 글48

템플릿 문자열, 객체 리터럴 탬플릿 문자열 프로그래밍을 하다 보면 종종 다음과 같은 코드를 작성하는 경우가 있다: var won = 1000; var result = '이 과자는 '+won+'원입니다.' 그런데 이런식으로 +로 출력문을 연결하게 되면 띄어쓰기를 고려해야하고 변수가 많아지면 식이 복잡해진다. 그래서 나온 게 탬플릿 문자열이다. ${}안에 변수명을 작성하면 된다. var won = 1000; const result = `이 과자는 ${won}웝입니다.`; cf) tagged template literal function(){} 내부에 함수 내용을 작성한 후, a(); 로 함수를 호출할 수 있다. 하지만 다음과 같이 소괄호()말고 백틱`을 사용해 함수를 호출할 수도 있다. a``; 이를 tagged template lit.. 2023. 1. 24.
var, const, let var: 블록 스코프 {} 밖에서도 유효함. const: 블록 스코프 {} 밖에서는 유효하지 않음. 하지만 function 스코프 function a(){} 밖으로는 var, const 모두 유효하지 않다. 따라서 var은 함수 스코프를 따르고, const는 블록 스코프를 따른다고 말한다. const에는 =를 한번만 쓸 수 있다. 따라서 const a=3; 으로 초기화하고 a= '5'; 등으로 값을 바꾸려고 하면 에러가 난다. 하지만 const에 객체를 넣은 경우에는 값 변경이 가능하다. 예를 들어, const b = { name: 'hhk' }; b.name = 'hkhkhk'; 와 같이 const 내의 객체의 값을 변경하는 것이 가능하다. js에서는 const를 처음 정의할 때 =를 무조건 딱 한 번.. 2023. 1. 24.
[Backend] 서버로서의 노드 서버로서의 노드 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램 클라이언트: 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버) 예시 브라우저(클라이언트, 요청)가 웹사이트(서버, 응답)에 접속 핸드폰(클라이언트)을 통해 앱스토어(서버)에서 앱 다운로드 노드 != 서버 But, 노드는 서버를 구성할 수 있게 하는 모듈(4장에서 설명)을 제공한다. cf) 노드 설치 후 버전 확인하는 방법 //node, npm 버전 node -v npm -v //npm 업그레이드 하기 i -g npm 2023. 1. 6.
[Backend] Node.js란? 공식 홈페이지의 설명 Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다. 노드 == 서버인가? 서버의 역할도 수행할 수 있는 "런타임"이다. 노드는 자바스크립트(언어)로 작성한 코드를 실행해 서버를 만드는 역할을 한다. 서버 실행을 위해 필요한 http/https/http2 모듈을 제공한다. 노드는 자바스크립트의 런타임이다. 런타임: 특정 언어로 만든 프로그램을 실행할 수 있게 해주는 가상 머신의 상태 노드는 자바스크립트로 만든 프로그램(서버이든 게임이든..)을 실행할 수 있게 해줌 다른 런타임으로는 웹 브라우저(크롬, 엣지, 사파리, 파이어폭스 등)가 있음 노드 이전에도 자바스크립트 런타임을 만들기 위한 많은 시도가 있었으나, 엔진 속도 문제로 실패함 노드는 single t.. 2023. 1. 6.
[Colab] 코랩과 구글 드라이브 연동하기 Google Colab으로 프로젝트를 진행할 때, 로컬 환경에 데이터를 저장하고 불러오는 대신 구글 드라이브에 존재하는 데이터를 Colab에 가져다 쓰고 싶은 경우가 있습니다. 이런 경우 데이터를 코랩에 올리는 행위를 mount한다고 부르는데, 코드 단 두 줄을 사용해 매우 간단히 진행할 수 있습니다. 다음은 사용자의 구글 드라이브를 코랩 내 /content/drive에 mount하는 코드입니다: from google.colab import drive drive.mount('/content/drive') 1. 코랩에서 위 코드 블럭을 실행하면 다음과 같은 팝업이 뜹니다. 'Google Drive에 연결' 버튼을 눌러서 Colab이 Google Drive에 엑세스하는 것을 허용합니다. 2. 그러면 다음과 .. 2023. 1. 2.
Sorting Algorithm [Selection Sort] Idea 왼쪽과 오른쪽 2개의 리스트 생성한 후, 초기 상태에서 모든 숫자를 오른쪽에 넣고, 오른쪽에서 가장 작은 숫자를 왼쪽으로 옮긴다. 이 과정을 오른쪽 리스트가 공백이 될 때까지 반복한다. 하지만 이런 방식으로 구현하면 정렬하려는 리스트와 크기가 같은 리스트를 하나 더 만들어줘야 하므로 메모리가 소비된다. 따라서 추가적인 리스트를 생성하지 않고 정렬하는 방법을 선택하도록 하자. 입력 배열에서 최솟값을 발견한 다음, 이 최솟값을 배열의 첫번째 원소와 교환(swap)한다. 이 절차를 (정렬하고자하는 숫자 개수 - 1)번 반복하면 숫자를 정렬할 수 있다. Psuedo Code selection_sort(A, n); //A는 정렬하고자 하는 리스트, n은 원소의 개수 for i 2022. 12. 11.
[Lecture 12] Joystick - JoyStick JoyStick의 input은 아날로그 시그널이므로 이를 컴퓨터가 이해할 수 있도록 디지털 시그널로 바꿔줘야 한다. ADC(Analog-to-Digital Converters)는 아날로그 시그널로 들어오는 voltage 값을 디지털(bit sequence)로 바꿔준다. 연속적인 analog값을 일정 주기로 sampling해서 디지털로 변환할 수 있다. 이때 sampling의 주기가 짧을수록 더 정교한(원래 아날로그 값과 비슷한) 데이터를 표현할 수 있다. sampling의 주기에 따라 같은 아날로그 시그널도 서로 다른 여러 개의 디지털 시그널로 표현될 수 있다. ADC에 사용 가능한 bit 수에 따라서도 디지털 시그널의 정교함이 달라진다. 0-10 사이의 값을 가지는 아날로그 시그널을.. 2022. 12. 6.
[Lab 10] //Exercise 7 //Goal: Write a program that turns on P2 RED LED at the initial state. //When the S1 button is pressed, turn P2 GREEN LED, and when the S2 button is pressed, //turn BLUE LED #include "msp.h" void PORT1_IRQHandler(void) { //S1 Button if (P1->IFG & BIT1) { P2->OUT = 0x02; //change output color to green P1->IFG &= ~BIT1; //reset: P1의 BIT1번을 disable 하면 interrupt signal이 clear되면서 해당 코드가 .. 2022. 12. 5.
[Lecture 11] LCD - LCD 한 픽셀의 색을 표현하기 위해서는 R,G,B 각각 8bit씩으로 이루어진 총 24bit의 sequence를 사용한다. 그래서 당연하게도 R,G,B 각각에 쓰이는 bit 수를 늘리면 표현할 수 있는 색상의 범위가 넓어진다. 그치만 다채로운 색상을 표현하기 위해서는 소프트웨어 상에서 bit를 늘림과 함께 디스플레이 상에서 그만큼 다양한 색이 표현가능한 하드웨어를 사용해야 한다. 그렇지 않으면 아무리 다양한 색을 출력하는 코드를 작성해도 하드웨어적으로 표현되지 않게 된다. - 보통 LCD와 같이 복잡한 디바이스를 사용하는 경우에는 코드에 initialization, graphic library, driver 등에 대한 설정이 필요하다. 레퍼런스 메뉴얼이 주어지는 경우 이를 따라서 구현하면 된다. 다.. 2022. 12. 5.
[2.6] MIPS Instruction Set Architecture VI - 언어와 MIPS 어셈블리언어 C언어가 MIPS 어셈블리언어로 어떻게 변환되는지 알아본다. 컴파일러에 의해 고급 언어로 작성된 C코드가 MIPS의 어셈블리언어로 바뀐다. 예전에는 어셈블리언어로 프로그램을 작성하는 경우도 있었다. 운영체제와 관련된 작업 중 속도가 중요한 경우는 그렇게 했다. 하지만 어셈블리의 비효율성 등을 극복하기 위해 고급언어인 C언어를 만들어낸 것이다. 이제 C언어를 어셈블리언어로 바꾸는 몇 가지 예시에 대해 알아보자. 배열의 경우 시작 위치만을 저장하고, 이후 원하는 배열의 원소에 접근하기 위해 인덱스 값만큼 떨어진 주소를 찾아간다. 정수의 크기는 4byte이므로 어셈블리어의 첫 두 줄에서 i*4를 진행한다. 이때, 곱셈보다 덧셈의 처리 속도가 훨씬 빠르므로 덧셈 두 번을 한다. 2022. 10. 13.
[2.5] MIPS Instruction Set Architecture V - 연산별 비트 구조 MIPS의 각 연산 과정에서 나타나는 비트 구조를 복습한다. (Recap) MIPS의 기계어는 32bit를 가진다. 기계어의 field는 opcode 영역(6bits)과 피연산자 영역(5bits+5bits+5bits+5bits+6bits)으로 나눌 수 있다. 레지스터 3개를 사용하는 instruction의 경우, 11bit가 남아돈다. 반면, memory addressing을 해야 하는 연산의 경우, 메모리의 주소를 표현하는 데만 32bit가 필요하기 때문에 opcode를 제외한 MIPS instruction field 영역으로는 표현하기에 부족하다. 따라서 레지스터와 메모리 주소를 혼합해서 사용한다든지의 방법으로 한정적으로 메모리를 표현해야 한다. 피연산자의 조합에 따라 instruction field.. 2022. 10. 13.
[2.4] MIPS Instruction Set Architecture IV - branch & jump 연산 MIPS의 Branch & Jump 연산과 비트 구조가 각 연산에서 어떻게 나타나는지 알아본다. Conditional branch instructions branch on equal: register 2개 + 16bit immediate 두 레지스터 값이 같으면 branch immediate값은 다음 수행해야 할 위치로부터 얼만큼 떨어진 instruction인지를 나타낸다. 이를 주소 값으로 따지면 기계어 하나의 크기가 4byte이므로 다음에 실행했어야 한 명령어의 주소로부터 {4*(immediate)}byte만큼 떨어진 주소를 가리키라는 것이다. 왜 굳이 이렇게 하는가? -> 32bit로 크기가 한정된 기계어 내에서 정보를 최대한 효과적으로 표현하기 위함이다. branch on not equal: re.. 2022. 10. 12.
[2.3] MIPS Instruction Set Architecture III - 논리연산 & Data Transfer 연산 MIPS의 논리 연산과 메모리에 접근하는 Data Transfer 연산에 대해 알아본다. 논리 연산 C언어에서 3 & 1 연산을 하면 결과는 1이 나온다. 이유는 C와 같은 고급 언어에서는 0이 아닌 모든 수를 참으로 가정하기 때문에 참 & 참 = 참이므로 결과가 1(참)이 나오는 것이다. 하지만 기계어에서 진행되는 bit 단위 연산에서 3 & 1 을 수행하면 0011 & 0001 = 0001 이다. 예시가 좀 별론데...어쨌든 무슨 의미인지 알겠죠? ㅎ 논리 연산에서도 산술 연산과 마찬가지로 immediate 값(16bit)을 사용할 수 있다. 레지스터에는 32bit 값을 저장할 수 있는데, immediate에는 16bit 값을 저장한다. and immediate에서는 32bit의 레지스터 값과 16b.. 2022. 10. 12.
[2.2] MIPS Instruction Set Architecture II - 비트 포맷 및 산술 연산 MIPS의 비트 포맷과 네 가지의 연산 종류 중 산술 연산에 대해 알아본다. (Recap)MIPS에서는 모든 instruction이 32bit로 구성된다. 그런데 메모리 주소 공간도 32bit이니까, 메모리를 instruction에 사용하기엔 공간이 부족한 것 아닌가? -> 맞다. Instruction을 나타내는 32bit 중 처음 6bit(opcode: 연산의 종류를 나타냄)를 제외한 모든 공간을 다 쓴다고 해도 26bit밖에 사용할 수 없으므로, 전체 메모리 주소를 나타내기에 부족하다. 따라서 메모리 주소를 직접 나타내야 하는 연산의 경우 26bit만을 사용하는 방법이 있다. 이 경우 전체 메모리 위치를 다 나타내진 못한다. 메모리 주소를 직접 적는 대신 레지스터에 넣어두고 그 레지스터를 기계어의 피.. 2022. 10. 12.
[2.1] MIPS Instruction Set Architecture - 레지스터 및 메모리 모델 ISA의 대표적인 기계어 집합인 MIPS의 원리와 연산 수행에 대해 알아본다. (Recap)컴퓨터마다 CPU에서 사용되는 기계어 집합이 다르다. (Instruction Set Architecture의 종류는 여러가지다.) ISA의 종류: IBM System/360, IA-32(x86), IA-64, MIPS, SPARC, Alpha, PA-RISC MIPS Register & Memory Model MIPS 레지스터 모델 피연산자 값을 저장할 범용 레지스터의 개수: 32개($0-$31) 레지스터 하나의 크기는 4 byte이다. 따라서 범용 레지스터는 (4 byte)*32(개) 만큼의 공간이 필요하다. 32개의 레지스터를 구분하기 위해서는 5bit가 필요하다(2^5 =32이므로) 범용 레지스터 외에도 몇 .. 2022. 10. 12.