일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ios
- 약타입
- 나를부르는숲
- 17681
- SWIFT
- beforePopState
- 비반환함수
- 옵셔널
- 함수형프로그래밍
- textinput
- 스위프트
- DelayInput
- next.js
- 약타입언어
- 중첩함수
- ReactNative
- reactnative android
- JavaScript
- 데이터타입함수
- lineending
- 프로그래머스
- multiline
- 리액트네이티브
- reactnavigation
- client-side-rendering
- switch구문
- Server-Side-Rendering
- 동적언어
- 72410
- replacingOccurrences
- Today
- Total
으니의 개발로그
[JavaScript] 동적 약타입 프로그래밍 언어 본문
동적 타입은 무엇인가?
국어사전에서 ‘동적’이라는 말의 찾아보면 움직이는 성격의
라는 뜻이라고 나온다. 그렇다면 동적 타입은 움직이는 성격의 타입이라는 것인데… 움직이는 성격의 타입이라는 게 어떤 걸 의미하는걸까?
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 예를 들어 let a = 'eun'
이라고 문자를 변수에 할당했다고 하자. 그러면 a
라는 변수의 타입은 string 으로 지정 됐을 것이다. 하지만! 이후에 a = 3
이라고 숫자를 할당 했을 때 오류가 생기지 않고 변수의 타입이 number로 변할 것이다. 이처럼 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 우리는 동적 타이핑이라고 하며 런타임시점에 타입이 정해지게 된다. 이러한 언어를 동적 타입 언어라고 하는데, 대표적인 동적 타입 언어로는 자바스크립트, 파이썬, PHP, 루비, 리스프, 펄 등이 있다.
그렇다면 이렇게 편리한데! 그러면 모든 언어를 동적 언어로 바꾸면 안될까? 응, 안돼~
편리하다는 것은 항상 이면에 위험이 도사리고 있다는 것이다. 변수의 타입이 언제든 변경가능하기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있다. 게다가 개발자 의도와 상관없이 자바스크립트 엔진이 타입을 바꿀 수도 잇다. 즉, 잘못된 예측을 할 수도 있다는 것이다. 그러면 당연히 오류가 생길 것이다. 결국 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어진다. 그래서 자바스크립트에서는 웬만하면 let
보다는 const
를 많이 사용하게 좋다.
그렇다면 정적 타입은 어떤 것일까?
C나 자바 같은 정적 타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 한다. 정적 타입 언어는 변수의 타입을 변경할 수 없으며 변수에 선언한 타입에 맞는 값만 할당할 수 있다. 정적 타입은 컴파일 시점에 타입 체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사하는 처리)를 수행한다. 만약 타입 체크에 통과하지 못하면 에러가 발생하고 프로그램의 실행을 막는다.
대표적인 정적 타입 언어로는 C, C++, 자바, 코틀린, 고, 하스켈, 러스크, 스칼라 등이 있다.
정리
- 동적 해석형 언어
- 미리 컴파일되지 않았음을 의미.(C++와 같은 다른 언어는 개발 중 또는 개발 후에 컴파일 됨. 즉, 최종 사용자와 공유하기 전)
- 코드가 런타임에 평가되고 실행됨
- 코드가 런타임에서 변경될 수 있음 (ex. 변수 타입)
- 약형 언어
- 데이터 타입을 자동으로 유추함
- 변수의 데이터 유형을 정의하지 않아도 됨
- 데이터 유형은 고정되어 있지 않으며 바뀔 수 있음
참고자료
[책] 모던 자바 스크립트 Deep Dive
'Front-end > JavaScript' 카테고리의 다른 글
[JavaScript] num++와 ++num의 차이점 (전위연산자, 후위연산자) (0) | 2023.02.15 |
---|---|
[JavaScript] ‘defer’ & ‘async’ 를 이용해 script 올바르게 불러오기 (0) | 2023.02.08 |
[JavaScript] 간접적 vs 직접적 함수 실행 (0) | 2023.01.11 |
[JavaScript] 웹사이트에 JavaScript 추가하기 (0) | 2023.01.08 |