[TIL_Javascript_21.08.23] 동적 타이핑 with 정적 타이핑
Prologue
Javascript의 모든 값은 데이터 타입을 갖는다. 그렇다면 변수는 데이터 타입을 갖는가?
"컴퓨터가 이해하는 코드는 어떤 바보도 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다."
-마틴 파울러, <리팩토링>의 저자
1. 정적 타입 언어
C언어나 Java같은 정적 타입(static/strong type) 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 한다. 이를 명시적 타입 선언이라 한다.
// C 변수에는 1바이트 정수 타입의 값(-128 ~ 127)만 할당할 수 있다.
char c;
// num 변수에는 4바이트 정수 타입의 값 (-2,124,483,648 ~ 2,124,483,647)만 할당할 수 있다.
int num;
정적 타입 언어의 특징
- 정적 타입 언어는 변수의 타입을 변경할 수 없다.
- 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
- 컴파일 시점에 타입 체크(선언한 테이터 타입에 맞는 값을 할당했는지 검사)를 수행한다.
- 만약 타입 체크를 통과하지 못했다면 에러를 발생시키고 프로그램의 실행 자체를 막는다.
- C, C++, Java, Kotlin, Go, Haskell, Rust, Scala 등...
2. 동적 타입 언어
동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있다. 이러한 동적 타입 언어의 특징은 데이터 타입에 대해 무감각해질 정도로 편리하다는 것이다. 하지만 언제나 그렇듯 편이함의 이면에는 위험이 도사리고 있다.
모든 소프트웨어 아키텍처에는 'Trade-Off'가 존재하며, 모든 애플리케이션에 적합한 'Silver-Bullet'은 동적 타입 언어 또한 구조적인 단점이 있다.
동적 타입 언어의 특징
- 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어렵다.
- 변수의 타입이 고정되어 있지 않고 동적으로 변하는 동적 타입 언어의 변수는 값의 변경에 의해 타입도 언제든지 변경될 수 있다. 따라서 동적 타입 언어의 변수는 값을 확인하기 전에는 타입을 확신할 수 없다.
- Javascript는 개발자의 의도와는 상관없이 Javascript 엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다.
- 즉, 숫자 타입의 변수일 것이라고 예측했지만 사실은 문자열 타입의 변수일 수도 있다는 뜻이다.
- 이러한 불확실성은 수많은 오류를 야기할 가능성이 높고, 동적 타입 언어는 유연성은 높지만 신뢰성이 떨어진다.
동적 타입 언어를 사용할 때 주의사항
-
변수는 꼭 필요한 경우에 한해 제한적으로 사용
: 변수 값은 재할당에 의해 언제든지 변경될 수 있다. 자바스크립트는 타입을 잘못 예측해 오류가 발생할 가능성이 크며, 변수의 개수가 많으면 많을수록 오류 발생 확률이 높아진다. -
변수의 유효 범위(스코프)는 최대한 좁게 만든다.
: 변수의 유효 범위가 넓으면 넓을수록 변수로 인해 오류가 발생할 확률이 높아진다. -
전역 변수는 최대한 사용하지 않도록 한다.
: 어디서든 참조/변경이 가능한 전역 변수는 의도치 않게 값이 변경될 가능성이 높고 다른 코드에 영향을 줄 가능성도 높다. 우리는 몇 백줄이 넘는 코드를 모두 확인하면서 변수를 사용하기 어렵다. 선언하는 단계에서 이 부분에 대한 경각심이 있는 상태에서 변수를 선언해야한다. -
변수보다는 상수를 사용해 값의 변경을 억제한다.
: const 사용
-
변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
: 변수 이름뿐 아니라 모든 식별자(변수, 함수, 클래스 이름 등)는 존재 이유를 파악할 수 있는 적절한 이름으로 지어야 한다.
Author And Source
이 문제에 관하여([TIL_Javascript_21.08.23] 동적 타이핑 with 정적 타이핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@offdutybyblo/TILJavascript21.08.23-동적-타이핑-with-정적-타이핑저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)