JavaScript의 자료형과 특성(4)

Choi·2022년 5월 18일

Javascript

목록 보기
4/9


📝 알고 읽으면 이해가 잘 될 용어들.


🔎 컴파일: 프로그래머가 작성한 언어를 컴퓨터가 이해할 수 있는 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가지의 타입이 존재한다.

  • string(문자열)
  • number(숫자)
  • boolean(불린값-true, false로 판단-)
  • undefined (값이 없음)*
  • null (값이 없음)
  • symbol(ES6에서 추가됨)

( * 부분의 undefined와 null에 대해선 따로 다루었다. )

위의 6가지 기본타입(Primitive Type)의 값들은 기본적으로 변경이 불가능한 값(Immutable value)으로, 원시타입의 값이라고도 부른다.

이들은 객체가 아니면서 메소드를 가지지 않고, 하나의 데이터만 가질 수 있다.

  1. String(문자열) 타입 : 문자열은 작은 따옴표(')와 큰 따옴표(")를 사용해서 만든다.

  2. Number(숫자) 타입 : 숫자와 무한대(Infinity : 양의 무한대와 -Infinity : 음의 무한대), NaN(숫자가 아닌 값)이 포함된다. Number 타입은 정수와 실수 구분없이 그 값을 바로 저장할 수 있다.

  3. Boolean(불린) 타입: 어떠한 값의 결과를 도출할 때 true(참)와 false(거짓)으로 판별하는 자료형이다.

  4. null: 값이 없는, 비어있음을 나타내는 값이다. 값이 할당되지 않았다는 의미의 undefined와는 다르게 아예 값이 없음(아무것도 없음)을 의미한다.

  5. undefined: 값이 없는, 할당 변수가 아직 할당되지 않았음을 의미한다. 자바스크립트에서 변수를 만들었을 때 값이 할당되지 않았을 때 출력되는 기본값이다.

  6. symbol: ES6에서 새로 추가된 타입으로 속성(Object property)의 식별자로 사용하기 위해 만들어졌다.(템플릿 리터럴, 화살표 함수, 변수 선언(let, const 추가) 등)


또한 원시타입은 메모리에 값을 그대로 저장하기 때문에 헷갈릴 것이 없다.


참조타입(Reference Type)

원시 타입을 제외한 나머지는 참조타입(객체(Object))을 참조타입이라고 한다. 배열과 객체, 그리고 함수가 대표적이며, 원시타입과의 가장 큰 차이점은 변수의 크기가 동적으로 변한다는 것이다.

  • 하나의 변수에 여러 데이터를 담을 수 있다.
  • 메모리에 값을 그대로 저장 출력하는 원시타입과 달리 메모리에 값을 주소로 저장하고, 출력시 메모리주소와 일치하는 값을 출력한다.

느슨한 타입(loosely typed)의 동적(dynamic) 언어의 문제점과 보완방법🤔

쉽게 말해 자바스크립트의 문제점이라고 생각했다.

  1. 브라우저에 종속적이라 크로스 브라우징 이슈가 발생한다.

  2. 유연성과 편리함을 갖춘 대신 안정성과 신뢰성이 떨어진다. 소스코드가 외부에 노출되어 악용될 가능성이 있다.

  3. 자바스크립트는 컴파일 과정이 아닌 런타임 과정에서 에러를 확인할 수 있기 때문에 프로그래머가 버그를 발견하고 대처하기가 쉽지 않다.

보완방법

제일 큰 문제는 데이터의 보안이 취약하다고 생각한다. 이를 보완하는 방법으로는 https:// 를 사용하여 데이터를 암호화 시키고 쿠키 설정을 안전하게 하는 것. API에 집중하여 보안을 강화시키는 것.
그 외의 문제점에 대한 보완방법은 조금 더 공부가 필요할 것 같다.

profile
1101100100011

0개의 댓글