TIL 20230522(자바스크립트-변수,리터럴,데이터타입,연산자,프로그램, 프로세스, 컴파일러,인터프리터)

뿌링클 치즈맛·2023년 5월 22일
0

Elice AI트랙 8기

목록 보기
6/28

인터프리터 개념 참고

변수와 리터럴, 데이터타입

하나 하나씩 읽고 기계어로 바꾸는 인터프리터 언어.

변수: 대명사와 비슷하다고 이해해도 될 것 같다.
var ㅁㅁ: ㅁㅁ는 변수!

인터프리터 실행 단계
변수 초기화(평가과정)->실행

var score; //이 상태에는 임의의 주소가 할당됨
score=80; //score에 80의 주소가 할당됨

var sum=10+20; //변수에 표현식 할당.
//sum:변수, 10+20은 표현식(값이 평가되어 생성된 결과).
sum:30; //에서 sum은 변수, 30은 정수 리터럴

리터럴:값. 100(정수),'hello world'(문자열) 같은 것들. 변수에 값으로 줄 수 있는 것들

표현식: 문의 일종. 값으로 평가될 수 있는 문이다.
var a=var b;는 불가함.
var b같은 변수 선언문은 표현식이 아니기 때문이다.
반면 b=100;이라는 할당문은 그 자체가 표현식이기도 한 문이다.

데이터 타입을 사용하는 이유

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  • 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

js는 int,char,str 등의 데이터타입을 지정하지 않고 저장할 수 있음
근데 코드 관리에 불편함이 있어 단점이 되기도 함

문자열은 '' "" 백틱 으로 표현할 수 있음

템플릿 리터럴: \n * 등의 이스케이프 코드를 포함함. 편리한 기능 제공.
이스케이프 코드 사용시에는 console.log를 사용해야 한다. 그렇지 않으면 그냥\n으로 나옴!

연산자

연산자: 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듦

a+b=15
a는 연산자, b는 피연산자(연산의 대상),15는 연산자.

산술 연산자
7*6=43;
문자열 연결 연산자
'This is'+'Javascript'
+ 연산자는 연산자와 피연산자 중 하나 이상이 문자열인 경우 다른 연산자/피연산자를 문자열로 만들고 문자열 연결 연산자로 동작한다.

할당 연산자
color='silver'

비교 연산자
2>3 => false

논리 연산자
true&& false =>false

타입 연산자

typeof 'HI' => string
typeof false => boolean
typeof 23 =>number

이항 산술 연산자 = 일반적인 사칙연산!
단항 산술 연산자 = 연산자가 한 개만 사용된다.

var a=1;
a=a+1; =>2
a+=1 =>3
a++; =>3
++a; =>5

위 코드를 개발자도구 콘솔에서 치면 =>의 값이 바로 아래에 출력된다.

 var r=1;
 var r2=r++;
 console.log(r2,r); => 2 3

이렇게 표시되는 이유는 r2=r++;에서 r2=r이 먼저 실행되고 그 다음에 r에 ++이 적용되기 때문이다.
반대로

var a=1;
var a2=++a;
console.log(a2,a) =>2 2

로 표시된다. 이는 ++a가 먼저 실행되고, a2=a;가 실행되기 때문이다.

undefined에 ++,--를 사용하면 NaN값이 나온다.

비교 연산자
a==b: a와 b 값이 같음 (a=1,b='1')
a === b: a와 b의 값과 타입이 같음 (a=1,b=1)
a!=b: a와 b의 값이 다름 (a=2,b=3)
a!==b: a와 b의 값과 타입이 다름 (a=1,b='3')

let

-변수를 중복으로 선언할 수 없음 (let a하고 아래에서 또 let a 못함) -블록레벨 스코프가 가능하다... 이게 무슨 말이냐?{}로 감싸진 부분을 지역 범위로 인정한다는 말.

let foo = 1; // 전역 변수

{
let foo = 2; // 지역 변수
let bar = 3; // 지역 변수
}
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined

이거 실행하면 bar는 선언되지 않았다고 오류 뜸
이유: let foo=2와 bar=3은 {}코드블록 내에서만 유효한 것이기 때문이다.

const

const c;하면 바로 오류 발생 이유: const는 값을 바꿀 수 없고 반드시 선언과 동시에 초기화해야 함 const는 선언과 동시에 할당을 해줘야 하기 때문에 변하지 않는 세율(3.3)등으로 사용하면 좋다.

프로그램 개념

프로그램: SW의 일종 시스템 프로그램(운영체제) -컴퓨터의 자원을 효율적이고 안전하게 사용할 수 있게 하기 위한 관리 프로그램 -응용 프로그램이 하드웨어를 통해 처리될 수 있도록 하는 프로그램

응용 프로그램(앱): 카카오톡,엑셀 등 운영체제 위에서 실행되는 프로그램
프로세스
-컴퓨터에서 실행중인 프로그램
-프로그램의 데이터가 메모리에 할당중인 상태

Compiler 언어
-C,C++,C#,JAVA
-컴퓨터가 이해할 수 있는 언어로 바꿔줘야 하는 언어
-컴파일 시간이 길지만, 컴파일 후의 실행 시간은 빠름
-대본을 먼저 번역해서 저장해두니 번역시간이 긺. 하지만 이미 저장해두었기 때문에 불러와서 읽기만 하면 됨

Interpreter
-Javascript,Python,BASIC,SNOBOL 등
->>print('hello') >>a=1 컴퓨터가 코드를 한 줄씩 읽어 실행시킴
-실시간 번역... 한줄 얘기하고 번역하고, 한 줄 얘기하고 번역하니 번역 속도는 빠르지만 실행 속도는 느림.
-CPU사용시간의 낭비가 크다.
-원시 프로그램의 변화에 대한 반응이 빠름

css의 animation,transition은 페이지가 움직이지만 정적이다.
사용자와 다이나믹하게 소통하는 것(hover는 정적)을 기준으로 동적이라고 할 수 있음.
기능을 구현하고 값을 받아오는 등의 일을 할 수 있는 것이 JS

Javascript

객체 기반 스크립트 언어. 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있다.
스크립트 언어: 코드를 컴파일하지 않고도 실행할 수 있는 프로그래밍 언어
HTML/CSS와 완전히 통합할 수 있고, 자바스크립트만으로도 웹페이지를 만들 수 있다.

const/var/let
const/var/let a; =>주소의 크기만큼 할당됨
const/var/let a=10; =>10의 주소를 할당
var문에서 변수에 값을 지정하지 않으면 값이 설정될 때까지 undefined 값을 갖게 됨

블록스코프
블록스코프: 작은 중괄호. {} 안에서만 존재. 밖에서 console.log 찍으면 안 나옴

let const는 항상 초기화해줘야 함. 처음에 값이 undefined로 설정되지 않아서
let const는 블록범위, var는 전역/함수범위
var는 var a;를 선언하고 아래에 var a;를 또 선언할 수 있음
let은 한번 선언 후 재선언할 수 없다. 변수를 업데이트 할 수는 있음
const는 한번 선언 후 업데이트와 재선언이 모두 불가하다.

var는 function scope.function scope는 함수 내에서만 유효
let과 const는 블록레벨 스코프.블록스코프는 더 작은 범위 {}속에서만 유효.

function add(a, b) {
for (var i = 0; i < 10; i++) {
var a = 1;
let b = 2;
document.write(a, b);
}
document.write(a, b);

}
여기서 b는 for 블록 안에서만 유효하기 때문에 두번째 document.write는 에러가 남

document.write('<br>');을 쓰면 띄어쓰기가 나오는군...interesting
document.write('배고파','<br>');로 써도 된다.

profile
뿌링클 치즈맛

0개의 댓글