정적 타입 언어 vs 동적 타입 언어
타입(Type) : 자료형을 의미한다. int, float, short 등의 원시 자료형과 객체를 포함한다.
int a = 0;
bool isChecked = false;
Person person = new Person();
정적 언어 : 정적 언어라는 건 위에서 말한 타입(이하 자료형)을 컴파일할 때 결정하는 것이다. C, C#, C++, 자바 등의 언어가 여기에 속한다. 이 언어를 통해 프로그래밍할 때는 변수에 들어갈 값의 형태에 따라 자료형을 지정해줘야 한다.
자료형을 결정한다는 건 프로그램의 모든 구성 요소의 자료형이 컴파일되는 시저멩 알 수 있고, 컴파일러가 타입을 검증한다는 뜻이다.
컴파일 시 자료형에 맞지 않는 값이 들어있다면 컴파일 에러가 발생한다.
이클립스로 간단하게 예시를 만들었다. int형 변수인 a에는 int형에 맞는 값인 1이 들어가서 컴파일 에러가 나지 않지만, boolean isChecked에 문자열을 넣었더니 문자열 밑에 빨간 줄이 생긴 걸 볼 수 있다. 이 부분이 컴파일 에러다.
저기에 마우스를 대면 Type mismatch: cannot convert from String to boolean이라는 문장이 나온다.
장점)
1. 컴파일 시 자료형에 대한 정보를 결정하기 때문에, 어떤 메서드를 호출할지 알아내는 과정이 없어 메서드 호출이 빠르다
2. 컴파일러가 정확성을 검증하기 때문에 초기에 타입 에러로 인한 문제를 발견할 수 있어 오류가 생길 확률이 줄어든다
3. 코드에서 다루는 객체가 어떤 타입인지 알 수 있어서 코드 가독성이 좋다.
동적 언어 : 코틀린, 자바스크립트, Ruby, 파이썬, SmallTalk 등이 동적 언어에 속한다. 동적 언어의 자료형은 실행 시에 결정된다. 아래처럼 변수만 써서 값을 지정할 수 있다.
[파이썬]
number = 100
string = "문자열"
[코틀린]
val number = 100
var string = "문자열"
※ 코틀린은 클래스, 인터페이스, 제네릭 등 자바와 비슷한 타입이 있다. 자바와 다른 점은 코틀린에는 Nullable Type이라는 자료형이 존재한다. 이름 그대로 Null이 될 수 있는 자료형이다. 이 타입을 써서 컴파일 시점에 NPE가 발생할 수 있는지에 대한 여부를 검증할 수 있다.
즉, if문으로 어떤 변수가 Null을 가질 경우에 대한 처리를 따로 하지 않아도 된다는 것이다.
장점)
1. 런타임까지 자료형에 대한 결정을 끌고 갈 수 있기 때문에 선택의 여지가 많다
단점)
인터프리터 언어는 배우기 쉽지만 실행 도중 변수에 예상 못한 자료형이 들어와 Type Error를 뿜는 경우가 생길 수 있어 잘 생각해서 사용해야 한다.