일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- vue3
- Machine Learning
- 프로그래머스
- 연결리스트
- 컨테이너
- RxJS
- 연결 리스트
- pytorch
- 프로세스
- 웹팩
- GraphQL
- RT scheduling
- C
- 배열
- 해시테이블
- 브라우저
- 타입스크립트
- 큐
- 스택
- alexnet
- 이진탐색
- cors
- 프론트엔드
- APOLLO
- 릿코드
- 자바스크립트
- 포인터
- 코딩테스트
- 알고리즘
- 자료구조
- Today
- Total
프린세스 다이어리
동적 타입 언어(statically typed languages) vs 정적 타입 언어(dynamically typed languages) 본문
동적 타입 언어(statically typed languages) vs 정적 타입 언어(dynamically typed languages)
개발공주 2021. 9. 7. 12:23동적 타입 언어
컴파일이 아니라 런타임 때 타입이 결정되는 언어.
- 타입 없이 변수만 선언해서 값을 지정할 수 있음.
let number = 11;
number = "십일"; // 정상
number가 최초에 Number로 선언되었지만, 두 번째 줄에 String을 재할당해도 타입 에러 안남
- 장점: 컴파일 시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드 작성 가능, 사용하기 위해 지켜야 할 규칙이 적어 러닝 커브가 낮고 상대적으로 코드가 짧음
- 단점: 예시처럼 런타임 실행 도중에 예상치 못한 타입이 들어와 타입 에러 발생할 수 있음, 런타임 시 에러를 확인할 수 있기 때문에 코드가 길고 복잡해질 경우 타입 에러를 찾기 어려워짐.
예: 파이썬, 자바스크립트, 루비, objective-c, php,...
정적 타입 언어
컴파일 시 변수의 타입이 결정되는 언어를 말함.
- 프로그래머가 변수에 들어갈 값의 형태에 따라 직접 변수의 타입을 명시해줘야 함.
let number = 11;
number = "11" // TypeError
컴파일 시에 자료형이 맞지 않는 값이 들어 있으면 컴파일 에러 발생함.
- 장점: 타입 에러를 초기에 발견할 수 있어 타입의 안정성이 높음, 컴파일 시에 미리 타입을 결정하기 때문에 실행 속도 빠름, 타입이 명시적으로 지정돼 있기 때문에 협업 및 장기적 개발이 수월함.
- 단점: 매번 코드 작성 시 변수형을 결정해줘야 하는 번거로움이 있음
예: 자바, C, C++, C#, Scala, Pascal,...
* C나 JAVA는 타입 체크와 컴파일이 동시에 이루어짐. ts 에서 타입에러는 C나 자바에서 warning이고 문제가 생겼음을 알려주기는 하지만 빌드를 멈추지는 않음.
정적 타입의 JavaScript, 동적 타입 언어인 TypeScript
js는 동적 타입의 인터프리터 언어로, 런타임에서 오류를 발견함.
-> 런타임은 컴파일 마친 응용 프로그램이 사용자에 의해 실행되는 때를 의미함.
-> 즉 런타임 에러는 이미 컴파일 다 마친 프로그램이 사용자에 의해 실행될 때 의도치 않은 예외상황 때문에 발생하는 오류임.
-> 따라서 런타임에서는 타입 체킹이 불가능함.
ts는 정적 타입의 컴파일 언어로, 타입스크립트 컴파일러 또는 바벨을 통해 자바스크립트 코드로 변환함.
-> 런타임 전, 코드 작성 단계에서 타입을 결정하고 타입 체크해서 오류를 미리 확인함.
-> ts는 js 런타임 동작을 모델링하는 타입 시스템을 가지고 있기 때문에, 런타임 오류를 발생시키는 코드 또한 찾아내려고 함. 그러나 타입 체커를 통과하면서 런타임 오류를 발생시키는 코드는 충분히 존재 가능.
'개발' 카테고리의 다른 글
깃헙에 반영되지 않은 예전 커밋 잔디심는 방법 (0) | 2021.11.12 |
---|---|
vscode에서 건드리지 않은 파일이 깃의 changes에 올라올 때 해결법 - cache 삭제 (0) | 2021.10.22 |
프록시(프락시) 서버 뜻, 프록시의 종류 및 URI 확장에 대해 정리 (0) | 2021.10.09 |
반복문에서 변수명으로 i, j, k, ... n을 사용하는 이유 (0) | 2021.09.23 |
인터프리터 언어(Interpreter Language) vs 컴파일 언어(Compiled Language) (0) | 2021.09.06 |