정적타이핑, 동적타이핑 (JavaScript 자바스크립트)

hihihiha2·2022년 9월 5일
1
post-thumbnail

변수의 타입이 데이터를 저장하고, 그것을 해석하는데에 어떠한 영향을 미치는지에 대한 이해가 선행되어야 정적, 동적타입에 대해 정확한 이해를 할 수 있다. 그래서 정적/동적 타이핑에 대해 알아보기 전에 먼저 이것에 대해 공부해보겠다.

🧐 타입과 데이터의 저장, 해석과의 관계

데이터타입이 필요한 이유
값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정
값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정
메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정

타입이 데이터의 해석에 어떠한 영향을 미치는지를 예시를 통해 살펴보자.

<예시1> 이 메모리 공간에서 이 위치에 given이라는 변수나 인자가 주어졌을때 그로부터 몇칸을 읽어들일지를 자료형으로 판단한다.

boolean이라면 한칸을 읽어서 false가 나오고

가위바위보라면 두칸을 읽어서 바위가 나오고

요일이라면 세칸을 읽어서 수요일로 인식된다.

<예시2> 메모리에 저장된 값 0100 0001을
숫자로 해석하면 65
문자열로 해석하면 A.

데이터를 저장할 때 뿐만아니라 주어진 위치에서 데이터를 읽을때도 중요하다.
실제 자료형들은 데이터를 저장하는 방식들도 여러가지이기 때문에, 읽어들인 비트들을 어떻게 해석하는지도 타입에 따라 결정된다.


정적타입 언어와 동적타입 언어

1. 정적타입 언어

변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 데이터타입을 사전에 정의한다.

1️⃣ 시점: 변수선언시점 변수의 타입결정

2️⃣ 타입변경: 변수의 타입을 변경 X
미리 변수에 선언한 타입에 맞는 값만 할당 가능

3️⃣ 컴파일언어가 많다

컴파일시점에 타입체크
선언한 데이터타입에 맞는 값을 할당했는지 검사 ➡️ 에러발생 ➡️ 프로그램실행 🚫

4️⃣ C, C++, JAVA, Kotilin, Go, Haskell,, Rust, Scala


2. 동적타입 언어

변수에 할당되어 있는 값에 의해 변수이 타입이 동적으로 결정된다.

1️⃣ 시점: 값을 할당하는 시점 변수의 타입이 동적으로 결정
변수를 선언할 때 타입선언 X

typeof
변수는 타입을 가지지 X
값이 타입을 가진다 O
변수의 데이터타입반환(X)
변수에 할당된 값의 데이터반환(O)

2️⃣ 타입변경: 타입 언제든지 변경가능
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. ➡️ 동적타이핑
(이미 변수를 선언했다고 하더라도 자유롭게 데이터타입에 상관없이 할당가능)

3️⃣ 인터프리터언어가 많다

4️⃣ JavaScript, Pyton, PHP, Ruby, Lisp, Perl

🧡 동적타입언어의 특징

유연성⬆️ 신뢰성⬇️

단점:

  • 변수의 타입이 고정되어 있지 않고 값의 변경에 의해 타입도 언제든지 변경
  • 값을 확인하기 전에는 타입을 확신할 수 없다
    개발자의 의도와 상관없이 자바스크립트 엔진에 의해 타입이 자동으로 변환되기도 한다.
  • 타입을 잘못 예측해 오류 발생 ⬆️

동적타입언어는 간단한 코드를 짤때는 편하지만 프로젝트규모가 커지면 숫자형함수에 문자열이 들어가는 등 자료형이 잘못들어가서 런타임 오류의 위험성이 커진다. 코딩중이 아니라 실행 시점이 되어서야 문제가 터질 수 있다.

↔️ 비교: 컴파일 언어는 코드를 실행하거나 배포하기 전, 개발과정에서 컴파일이란 과정을 거치기 때문에 코드중 철자나 문법상의 오류가 있을때 컴파일 단계에서 오류를 발생시켜서 잡아낼 수 있다.

자바스크립트의 이러한점 때문에 사용시 주의점이 몇가지 있다.

자바스크립트에서 변수를 사용할때 주의점
변수는 꼭 필요할 때만 사용한다.
변수의 유효범위(스코프)는 최대한 좁게 만든다
전역변수는 최대한 사용하지 않는다.
변수보다는 상수를 사용해 값의 변경을 억제한다. (const)
변수의 이름은 변수의 목적이나 의미를 파악할 수 있도로 네이밍한다.

➕ 동적타입을 쓰는 자바스크립트의 한계를 보완하기 위해 만들어진 것이 타입스크립트.

✍️강의를 듣고 책을보면서 직접 공부하고 정리한 내용입니다📚
모던자바스크립트
얄팍한코딩사전 자료형과 정적/동적 타입

profile
맨땅에 헤딩

0개의 댓글