
📝 알고 읽으면 이해가 잘 될 용어들.
🔎 컴파일: 프로그래머가 작성한 언어를 컴퓨터가 이해할 수 있는 0과 1의 언어로 변환하는 과정
🔎 컴파일러: 컴퓨터의 언어로 변환하는 과정을 실행하는 사람(프로그래머)
🔎 런타임: 프로그램이 실행되고 있는 시간과 공간을 나타내는 말. JavaScript를 이용해서 내가 만든 프로그램을 실행시킬 때, 실행을 하는 동안 브라우저에서 작동되는 공간과 작동되고 있는 시간.
🔎 ES6(ECMAScript6): JavaScript가 넷스케이프 커뮤니케이션즈로부터 개발되고, MS에서 JScript를 개발.
두 언어가 서로 호환되지 못하는 경우가 생기며 크로스 브라우징 이슈가 발생.
이 이슈를 해결하기 위해 JavaScript를 표준화한 것이ECMAScrip. ES6은 버전 숫자를 붙여 ECMAScript를 줄여쓰는 말.
🔎 크로스 브라우징 이슈: 기능이 모든 브라우저에서 동일하게 동작하지 않는 이슈
✔ 정적언어(Static Typed)와 동적(Dynamic Typed) 언어
📢 대표적인 정적언어(Static Typed)C, C++, JAVA
특징:
- 진입장벽이 높은 편이다. (초보자가 배우기에 다소 어려울 수 있는 언어.)
- 타입 오류가 컴파일 시에 발견되기 때문에 사소한 버그도 쉽게 알아챌 수 있다.
- 각각의 변수의 타입을 꼭 지정해주어야 한다. (숫자의 경우도 어떤 타입의 숫자인지 타입을 나누어 사용한다.)
- 안정성이 높다. (보안, 은행, 대기업에서 주로 사용)
📢대표적인 동적언어(Dynamic typed)
JavaScript, Ruby, Python
특징:- 진입장벽이 낮은 편이다. (초보자가 배우기에 쉬움.)
- 프로그래머들이 타입을 고민할 필요없이 빠른 코드작성이 가능하다.(유연함)
- 타입 오류가 런타임 시에 발견되기 때문에 프로그래머가 아닌 사용자가 에러를 확인하게 되는 문제가 발생할 수 있다.
- 유연성이 높은대신 안정성이 정적언어보다 떨어진다.
동적언어에서 하나의 갈래로 나누어지는 게 있는데 그게 바로 느슨한타입(loosely typed)의 동적(dynamic) 언어로,
Javascript가 그 대표적 예다.
느슨한 타입(loosely typed)의 동적(dynamic) 언어 JavaScript
동적(dynamic) 언어이며 느슨한 타입(loosely typed)을 가지고 있다는게 어떤 의미인지 다소 헷갈린다.
느슨한 타입체크를 하는 언어이자, 동적 언어라고 생각하면 이해하기가 좀 더 쉽다.
JavaScript의 변수는 어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당 및 재할당이 가능하다는 특징이 있다.
변수에 모든 타입을 할당시킬 수 있다는 것이다.
예로
let flower = '꽃' //문자열
flower = 35 //숫자
flower = true //불린
flower = null //값이 없음
flower = undefined //값이 없음
JavaScript의 데이터 타입들
자바스크립트의 데이터 타입은 크게 기본 타입(Primitive Type)과 참조 타입(Reference Type)으로 나뉜다.
⭐ 기본타입(Primitive Type)
기본타입에는 총 6가지의 타입이 존재한다.
( * 부분의 undefined와 null에 대해선 따로 다루었다. )
위의 6가지 기본타입(Primitive Type)의 값들은 기본적으로 변경이 불가능한 값(Immutable value)으로, 원시타입의 값이라고도 부른다.
이들은 객체가 아니면서 메소드를 가지지 않고, 하나의 데이터만 가질 수 있다.
String(문자열) 타입 : 문자열은 작은 따옴표(')와 큰 따옴표(")를 사용해서 만든다.
Number(숫자) 타입 : 숫자와 무한대(Infinity : 양의 무한대와 -Infinity : 음의 무한대), NaN(숫자가 아닌 값)이 포함된다. Number 타입은 정수와 실수 구분없이 그 값을 바로 저장할 수 있다.
Boolean(불린) 타입: 어떠한 값의 결과를 도출할 때 true(참)와 false(거짓)으로 판별하는 자료형이다.
null: 값이 없는, 비어있음을 나타내는 값이다. 값이 할당되지 않았다는 의미의 undefined와는 다르게 아예 값이 없음(아무것도 없음)을 의미한다.
undefined: 값이 없는, 할당 변수가 아직 할당되지 않았음을 의미한다. 자바스크립트에서 변수를 만들었을 때 값이 할당되지 않았을 때 출력되는 기본값이다.
symbol: ES6에서 새로 추가된 타입으로 속성(Object property)의 식별자로 사용하기 위해 만들어졌다.(템플릿 리터럴, 화살표 함수, 변수 선언(let, const 추가) 등)
또한 원시타입은 메모리에 값을 그대로 저장하기 때문에 헷갈릴 것이 없다.
⭐ 참조타입(Reference Type)
원시 타입을 제외한 나머지는 참조타입(객체(Object))을 참조타입이라고 한다. 배열과 객체, 그리고 함수가 대표적이며, 원시타입과의 가장 큰 차이점은 변수의 크기가 동적으로 변한다는 것이다.
느슨한 타입(loosely typed)의 동적(dynamic) 언어의 문제점과 보완방법🤔
쉽게 말해 자바스크립트의 문제점이라고 생각했다.
브라우저에 종속적이라 크로스 브라우징 이슈가 발생한다.
유연성과 편리함을 갖춘 대신 안정성과 신뢰성이 떨어진다. 소스코드가 외부에 노출되어 악용될 가능성이 있다.
자바스크립트는 컴파일 과정이 아닌 런타임 과정에서 에러를 확인할 수 있기 때문에 프로그래머가 버그를 발견하고 대처하기가 쉽지 않다.
보완방법
제일 큰 문제는 데이터의 보안이 취약하다고 생각한다. 이를 보완하는 방법으로는 https:// 를 사용하여 데이터를 암호화 시키고 쿠키 설정을 안전하게 하는 것. API에 집중하여 보안을 강화시키는 것.
그 외의 문제점에 대한 보완방법은 조금 더 공부가 필요할 것 같다.