2 minute read

Javascript를 스터디를 통해 기초부터 다시 차근차근 공부하게 되었다. 모던 자바 스크립트 Deep Dive라는 책과 구글링을 통해 공부하고 중요한 부분을 블로그 작성하는 방식으로 하게 되었고 내가 오늘 적게 될 내용은 제목에서 봤다싶이 JavaScript 동적 타이핑이다.

1. 동적 타이핑

1-1. 동적 타입 언어와 정적 타입 언어

  • 자바스크립트의 모든 값은 데이터 타입을 갖는다. (데이터 타입은 값의 종류를 말한다.)
  • C나 JAVA같은 정적 타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야한다.
  • 정적 타입 언어는 변수의 타입을 변경할수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
  • 정적 타입 언어는 컴파일 시점에 타입 체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사하는 처리)를 수행한다.
  • 정적 타입 언어로 C, C++, JAVA 등이 있다.

자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다. 다만 var, let, const 키워드를 사용해 변수를 선언할 뿐이다. 자바스크립트의 변수는 정적 타입 언어와 같이 미리 선언한 데이터 타입의 값만 할당할 수 있는것이 아니다. 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.

typeof연산자는 연산자 뒤에 위치한 피연산자의 데이터 타입을 문자열로 반환한다.

ex)

<script>
var foo;
console.log(type of foo); //undefined
foo = 3;
console.log(type of foo); // number
foo = 'Hello';
console.log(type of foo); // string
foo = true;
console.log(type of foo); // boolean
foo = null;
console.log(type of foo); // object
foo = Symbol();
console.log(type of foo); // symbol
foo = {};
console.log(type of foo); // object
foo = []
console.log(type of foo); // object
foo = function(){}'
console.log(type of foo); // function
</script>

typeof 연산자로 변수를 연산하면 변수의 데이터 타입을 반환한다.

자바스크립트의 변수에는 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있으므로 정적 타입 언어에서 말하는 데이터 타입과 개념이 다르다. 정적 타입 언어는 변수 선언 시점에 변수의 타입이 결정되고 변수의 타입을 변경할 수 없다. 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑이라고 하며, 자바스크립트를 정적 타입 언어와 구별하기 위해 동적 타입 언어라 한다. 대표적인 동적 타입 언어로는 JavaScript, Python,PHP 등이 있다.

1-2. 동적 타입 언어와 변수

동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할수 있다.

모든 소프트웨어 아키텍처에는 트레이드오프가 존재하며, 모든 애플리케이션에 적합한 은 탄환은 없듯이 동적 타입 언어 또한 구조적인 단점이 있다.

  • 변수 값은 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있다.
  • 변수의 타입이 고정되어 있지 않고 동적으로 변하는 동적 타입 언어의 변수는 값의 변경에 의해 타입도 언제든지 변경될 수 있다.
  • 동적 타입언어의 변수는 값을 확인하기 전에는 타입을 확신할 수 없다.
  • JS는 개발자의 의도와는 상관없이 JS엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다.
  • 숫자 타입의 변수일 것이라고 예측했지만 사실은 문자열 타입의 변수일 수도 있다는 말이다.
  • 잘못된 예측에 의해 작성된 프로그램은 당연히 오류를 뿜어낼 것이다. 결국 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어진다.

내가 공부한건 여기까지다.
스터디를 통해 여태 모르고 지나갔던 동적타이핑에 대해서 확실히 공부한것 같다.
아직 모르는게 많지만 스터디를 통해 모르는부분 위주로 공부하면 블로그 작성을 해야겠단 생각이 든다.

끝으로 책 마지막 부분 좋은 글이 있어 적고 마무리 하겠다.

코드는 오해하지 않도록 작성해야한다. 오해는 커뮤니케이션을 어렵게 하는 대표적인 원인으로 생산성을 떨어뜨리는 것은 물론 팀의 사기까지 저하시킨다. 코드는 동작하는 것만이 존재 목적은 아니다. 코드는 개발자를 위한 문서이기도 하다. 따라서 사람이 이해할 수 있는 코드, 즉 가독성이 좋은 코드가 좋은 코드다