[JS] 1. Basic (1)




1. Overview

JavaScript란?

  • 객체(Object) 기반의 스크립트 프로그래밍 언어
  • ECMAScript 사양을 준수하는 범용 스크립팅 언어
  • 자바와 직접적인 연관은 없으며, 웹의 동적 동작을 구현하기 위해 제작
  • Mocha > LiveScript > JavaScript 로 명칭 변경
  • JavaScript는 JS 엔진 위에서 수행되며, Google V8, Firefox SpiderMonkey, Edge Chakra 존재


ECMAScript란?

  • Ecma International이 ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어
  • 자바스크립트를 표준화하기 위해 만들어졌으며, 액션스크립트와 J스크립트 등 다른 구현체도 포함
  • Ecma International : 정보 통신에 대한 표준을 제정하는 비영리 표준화 기구
  • ECMA-262: Ecma International에서 제정한 기술 규격의 이름으로, 범용 목적의 스크립트 언어 명세 기술
  • 97년 ES1 초판, 09년 ES5, 15년 ES2015(ES6)으로 매해 6월에 버전 갱신 중


코드 동작 흐름

  • 개발자가 코딩하여 스크립트 만듦
  • 스크립트를 컴파일러나 인터프리터를 이용하여 Bytecode로 변경후 컴퓨터에서 실행
  • 컴퓨터의 동작을 디버깅하며 개발자가 유지보수


컴퓨터 내부 동작 원리

  • Disk : 자바스크립트 저장되어 있으며 메모리에 Load 된다
  • Memory : 변수, 상수 등 임시 저장소
  • CPU : Momery에서 연산 필요시 CPU에 Load/Save 된다


자바스크립트 변환 절차

JavaScript Source > Parse > Abstract Syntax Tree (추상화된 의미있는 트리) > Compile > Ignition Bytecode



2. 기본 입출력

입출력

  • 사용자가 프로그램과 상호작용하기 위한 방법으로, 입력과 출력을 아우르는 개념
  • Input/Output의 머리 글자를 따서 I/O로 줄여서도 표기
  • 운영 체제에서의 대표적인 입출력을 “표준 입력 / 표준 출력 / 표준 오류 출력”


표준 입력 (stdin)

  • 일반적으로 컴퓨터의 키보드의 응답을 받아 입력
  • 프로그램의 데이터를 추가하기 위한 입력 장치
  • 알고리즘에서는 문제의 Testcase 입력을 위해 사용


표준 출력 (stdout)

  • 일반적으로 컴퓨터의 모니터에 문자열로 출력
  • 프로그램의 실행 상태 혹은 실행 결과를 보고 판단
  • 알고리즘에서는 문제의 정답 확인, 디버깅 용으로 사용
// 표준 입출력 예제
const fs = require("fs");
const input = fs.readFileSync("./input.txt", "utf-8");

console.log(input);



3. 기본 용어

코드구성

let 안녕 = "하세요"
let hi = "hello"
let HI = "HELLO"

console.log(안녕)
console.log(hi)
console.log(HI)
  • Java Script 문법의 대부분은 C, C++, Java로부터 차용하여 제작된 스크립트 기반의 언어
  • 다수의 표현식(expression)으로 하나의 명령문(statement)이 만들어지며, 명령문으로 프로그램이 수행
  • 하나의 명령문 끝은 개행문자(Enter) 혹은 세미콜론(;)으로 표시
  • 표현식(expression) > 명령문(statement) > 응용 프로그램(application)

키워드

  • 자바스크립트에서 문법을 만들 때 미리 정해진 용도로 동작하기 위해 정의해 놓은 단어
  • 자바 스크립트에 예약된 키워드 목록


식별자

  • 스크립트에서 변수나 함수에 이름을 붙일 때 사용하는 단어
  • 대소문자를 구별하며 유니코드 문자셋을 이용
  • 자바스크립트 내 식별자 규칙
    1. 키워드 사용 불가
    2. 숫자로 시작 불가
    3. 특수문자는 _와 $만 허용
    4. 공백 문자 포함 불가 for, void, 123algo, al go 👎


주석

// single-line commnets
console.log("hello")

/* multl-line comments
어떤 문자가 와도
개행이 되어도 주석 처리가 된다
*/
console.log("world")
  • 프로그램 구현 시 개발자의 설명 및 이해를 쉽게 도와주는 문장으로 실제 실행 코드에는 포함되지 않음
  • 주석의 종류는 단일 행 주석 // 과 다중 행 주석 /* */ 존재



4. 변수와 상수

변수란?

let a = 123;
console.log(a);

a = 456;
console.log(a);

// SyntaxError: Identifier 'a' has already been declared
// 중복 선언 불가!
let a = 789;

  • 변경 가능한 값을 저장하기 위한 기억 공간 (memory)
  • 사용하기 전 반드시 선언 필요
  • 중복 선언 불가능
  • 선언 후 할당 가능
  • 키워드 : let


상수란?

// 상수는 선언과 동시에 값을 초기화해야한다.
const b = 123
console.log(b)

// TypeError: Assignment to constant variable.
b = 456;

// SyntaxError: Missing initializer in const declaration
const c;
c = 123
  • 변경 불가능한 값을 저장하기 위한 기억 공간
  • 사용하기 전 반드시 선언 필요
  • 중복 선언 불가능
  • 선언과 동시에 초기화 해야 한다.
  • 상수는 보통 대문자로 표기 const TESTCASE = 5;
  • 키워드 : const


// 선언 후 할당
let hi;
hi = "hello";

// 선언과 동시에 초기화
let halo = "hello!";

// 한 줄에 여러 변수 선언하고 초기화
let name = "nahyun",
  age = 13,
  msg = "hello";

// 상수는 보통 대문자로 표기
const TESTCASE = 5;
const BIRTHDAY = "1997.03,19";



호이스팅 (Hoisting)

// using var
console.log(name1) //undefined
var name1 = "nahyun"
console.log(name1) //nahyun

// hoisting
var name2;
console.log(name2)
name2 = "nahyun"
console.log(name2)

// using let
// ReferenceError: name3 is not defined
console.log(name3)
name3 = "nahyun"
  • 코드에 선언된 변수 및 함수를 유효한 범위의 코드 상단으로 끌어 올리는 작업
  • var의 변수/함수의 선언만 위로 올려지고, 할당은 올려지지 않음
  • let/const 변수 선언과 함수 표현식에서는 호이스팅 발생하지 않음
  • var 사용 지양하기



나의 회고 🤫

컴퓨터 내부 동작 과정은 학부생때 공부하고 잊고 지냈어서 다시 한번 다음에 재대로 공부해봐야겠다.
기초 내용이여서 대부분 알고 있던 내용이었지만 맨날 까먹는 호이스팅에 대해 다시 한번 돌아볼 수 있는 시간이었다.
어서 js 공부하고 자료구조,알고리즘 하고싶다..!!!
이번에도 꾸준히 열심히 화이팅!👍👍