자바스크립트/자바스크립트란?

자바스크립트의 고유한 특성

위르겐 2022. 7. 18. 18:35

 

프론트엔드 개발자를 목표로 한다면

자바스크립트(이하 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도 바로 바로 적용되기 때문에

안 쓸 이유가 없다.

 

 

 

반응형

'자바스크립트 > 자바스크립트란?' 카테고리의 다른 글

스코프, 호이스팅, TDZ  (0) 2022.07.20
불변 객체를 만드는 방법  (0) 2022.07.19
얕은 복사와 깊은 복사  (0) 2022.07.19
원시자료형과 참조자료형  (0) 2022.07.19
undefined와 null  (0) 2022.07.19