자바스크립트의 고유한 특성
프론트엔드 개발자를 목표로 한다면
자바스크립트(이하 JS)를
갈고 닦고 다듬어야한다.
JS의 고유한 특성과
다른 언어들이랑은 다른 동작원리까지
현재 [자바스크립트란?]의 카테고리에
시리즈로 정리해보려고 한다.
JS는
자바, C언어와는 다르게
'융통성'을 가지고 있다.
개발자들이 좀 더 편하게 사용할 수 있고
타자를 한 글자라도 덜 칠 수 있도록 해주는 언어이다.
변수선언을 예로 들어보자
아래의 코드는 JAVA의 변수선언이다.
i라는 변수에 100을 할당해준다.
int i=100;
let, var, const를 무시하고
극단적으로 비교해보자면
JS는 아래와 같이
i = 100
간단명료하게 사용할 수 있다.
(물론 이렇게 사용하는 개발자는 없다.)
또한
자료형을 비교할 때에
특히 고유의 특성이 드러난다.
10 == '10' //True
10 === '10' //False
좌항은 정수이고 우항은 문자열이다.
느슨한 비교인 == 로 비교했을 땐
해당 결과가 true로 반환된다.
엄격한 비교인 ===로 비교했을 땐
그때야 비로소 false를 출력해준다.
이렇듯 자바스크립트는
느슨하고 유연한 특성을 가지고 있다.
두번째로는
동적 타입언어의 특성을 가지고 있다,
이 역시
정적타입 언어인 JAVA, C, C++, C# 등의 언어와는
상반되는 개념인데
정적타입 언어는
컴파일타임에 변수의 타입이 결정되는 언어이다.
컴파일타임은
개발자에 의해 C, JAVA 등과 같은 개발 언어로 소스코드가 작성되며,
컴파일 과정을 통해 컴퓨터가 인식할 수 있는 기계어 코드로 변환되어
실행 가능한 프로그램이 되는 과정이다.
반면
JS나 Python, 루비 등의 동적타입 언어는
컴파일 시 자료형을 정하는 것이 아니라
런타임 시 자료형이 결정되며
타입 없이 변수만 선언하여 값을 지정할 수 있다.
정적 타입 언어의 장점 및 단점
장점
- 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입 관련한 런타임 오류를 방지할 수 있고 타입의 안정성이 높음.
- 특히, 사용자에게 배포되는 앱의 경우 타입 관련한 검증을 컴파일 시에 하지 않고 런타임에 하게 되면 앱 사용 시 타입 불일치로 인한 크래시의 발생 위험이 높아짐.
- 컴파일 시에 미리 타입을 결정하기 때문에 실행 속도가 빠름
- 코드의 가독성이 좋음. 다수의 협업이나 프로젝트의 장기 개발 및 유지보수에 유리함.
단점
- 매번 코드 작성시 변수형을 결정해줘야 하는 번거로움이 있음.
동적 타입 언어의 장점 및 단점
장점
- 런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높음
- 타입 관련하여 지켜야 할 규칙이 적기 때문에 상대적으로 코드가 짧고 Learning-Curve가 낮다.
단점
- 실행 도중에 변수에 예상치 못한 자료형이 들어와 TypeError를 발생할 수 있음.
- 타입 관련 Error는 런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워짐.
- 이러한 불편함을 해소하기 위해 TypeScript나 Flow 등을 사용할 수 있음.
이러한 동적타입언어의 단점을 개선하고
보완할 수 있는 방법이란.....
타입스크립트(TS)가 유일하지 않을까싶다.
JS의 느슨한 부분을 엄격하게 잡아주고
타입을 바로바로 지정해주기 때문에
규모가 큰 프로젝트의 경우
대부분 TS를 사용하는 추세이기도 하고
JS가 업데이트 되면
TS도 바로 바로 적용되기 때문에
안 쓸 이유가 없다.