반응형

정적 언어

 

 

개념


자료형(Type)이 고정돼 있는 언어.

정적 언어는 *컴파일 진행할 변수의 타입이 결정된다.

 

*컴파일 : 우리 사용한 언어를 컴퓨터가 알아먹을  있게 바이트코드 라는 것으로 변경하는 작업

 

대표적인 예를 들자면,

Java(자바)

String a = 10; //에러

int b = 10; //성공

var c = 22; //에러

이렇게 코딩을 했을 경우 바로 빨간줄이 그어지면서 에러가 나는데,

 

유치한 상황극

Java : " String인데 정수잖아, 그리고 var 뉘집 개야? 몰라 에러 나는 코드야 컴파일 안해줘 아니 못해줘"

프로 야근러 : " 그러네 미안"

 

이런 식으로컴파일 시에 자료형에 맞지 않은 값이 들어있으면 컴파일 에러가 발생합니다.

 

 

사용 이유


컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도 향상

타입 에러로 인한 문제점을 초기에 발견할 있어 타입의 안정성 보장

 

 

종류


C

C#

C++

Java

Go

Haskell

Kotlin

Rust

Scala 

... 외에 더 있습니다.

 

 

동적 언어

 

개념


자료형이 그것을 처리할 함수(또는 메서드)에 따라 그때그때 바뀌는 언어.

동적 타입 언어의 자료형은 컴파일 시 자료형을 정하는 것이 아니고 *런타임 시에 결정합니다.

대표적인 예를 들자면,

JavaScript(자바스크립트)

function sum(){
var a = 10;
var b= "10";
console.log(a+b);
//"1010" 
}

이런 식으로 정수 10인 a 변수와 문자열 "10"인 b 변수를 더하면 에러를 뱉지 않고, 문자열 "1010"이 된다.

 

유치한 상황극 2

JavaScript : "a랑 b를 더한다고? 음 정수+문자열이긴 한데 정수 값으로 된 문자열이니까 내가 합쳐줘야겠다 여기 1010"

프로 야근러 : "고맙다^^ 근데 내가 원하는 값은 20이야"

 

*런타임 : 프로그래밍 언어가 구동되는 환경


런타임이 실행될 때 타입을 검사한다는 게 무슨 말일까?

JavaScript(자바스크립트) 코드로 알아보자

function calc(){
var a = 'blueHat'-1;
return a;
}

Java 코드였다면 미치고 팔짝 뛰면서 에러를 뱉을 텐데

JavaScript는 아무런 반응이 없다. 컴파일을 통과했다는 소리!

하지만

calc();

함수를 실행한다면? 실행될 때 즉!! *런타임 될 때!!

NaN (TypeError)를 뱉습니다.

 

JavaScript : 이건 너무한 거 아니냐고! 퉤 TypeError

 

 

사용 이유


*런타임(Run time)까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 많은 선택의 여지가 있고,

동적으로 변경되기 때문에 결과가 이상하게 나올지라도 (빨간 글씨만 나오면 심장이 두근대는)

매우 까다로운(?) 자료형 검사를 피할 수 있다.

 

 

종류


JavaScript

Ruby

Python

SmallTalk

Lisp

Lua

Perl

PHP

... 외에 더 있습니다. 

 

 

 

반응형

+ Recent posts