변수에는 데이터 타입이 있습니다. 컴퓨터 소프트웨어에서는 당연한 이야기지만 필자는 프로그래밍을 배우면서도 오랫동안 이 개념을 이해하지 못하고 혼동했습니다.
변수(variable) - 변하는 수를 만들기 위해서는 데이터 타입 (type)이 있어야 합니다. 동적 타이핑 언어를 쓰면 이런 것을 별로 생각할 필요도 없는데 사람이 생각하지 않아도 컴파일러들은 모든 변수에 얼마의 데이터 타입을 할당할지 정하고 있습니다. 사람이 했던 일을 컴파일러가 하는 거니까 이것도 지능 혹은 현대의 컴파일러 수준을 보면 낮은 단계의 인공지능이라고도 말할 수 있지 않을까 - 싶습니다.
var 키워드는 variable의 약자입니다. 변수라는 뜻이지요. 변수인데 타입을 주진 않았습니다.
var a = 5; 이렇게 쓰면 컴파일러의 추론(infer) 능력으로 a에 integer(정수) 타입을 할당합니다. 파이썬 같은 동적 언어에서는 var 도 쓸 필요없이 a = 5; a = 'Hello' 처럼 마음대로 타입을 바꾸는게 허용되지만 정적 언어(static language)에서는 한번 할당한 타입이 다른 타입으로 바뀌는 규칙을 넣기가... 취지에 맞지 않겠지요. (불가능하진 않겠지만 설계가 불안정해진다)
*다트의 var 키워드는 처음 타입을 설정을 한번 할 수 있는 것이고 그 후엔 안되는 규칙이다 - 는 것을 알면 됩니다.
void main() {
// var a is integer
var a = 5;
print(a);
// you can't assign string type to a. once a is assigned to integer it's not going to change
a = "some string";
}
위의 예제 코드의 컴파일 시 나오는 에러 메시지를 살펴보면 String 타입 값은 int 타입에 할당이 안된다고 나옵니다. 당연한 말이지요. 숫자를 저장하는 메모리와 String (문자열)의 메모리 배치는 전혀 다르기 때문입니다. 동적 타입(dynamic typing)언어와 비교하면 큰 차이가 보입니다.
자료형은 소프트웨어 코스의 초기에 배우는 부분이지만 끝까지 이해가 잘되진 않습니다. 예전에 그런 의문들을 가지고 써놨던 포스팅들이 조각처럼 있어서 링크를 남겨둡니다.
자바 튜토리얼 (2-3) 자바의 변수 (실수형, 부동소수점 방식)