앞선 강의에서 var에 대하여 설명하였다. (자바스크립트 뽀개기 1편 – var가 뭐지?

var는 그저 무언가를 담아둘 수 있는 바가지를 뜻한다고 하였는데, var라는 자료형은 필자가 안드로이드 개발자로 시작하여서 특이하게 받아들였을뿐, 처음 자바스크립트로 개발자를 시작한 동료들은 전혀 이상하게 생각하지 않았다.

다른 동료들은 당연시 받아들이는 것을 파고드는 내 모습에 스스로 감동하여 또다시 파고든 결과 안드로이드와 다른부분을 다시 발견하였다.

var test = function(a, b) {
	var c = a+b;
	return c;
}

위 예제에서 필자가 의아했던 부분은 function을 선언할때 파라미터의 자료형을 선언하지 않은 부분이다. a, b 라는 변수만 쓰여있을 뿐 변수의 정의가 이루어지지 않았음에도 c를 리턴하는 결과를 볼 수 있었다.

그동안 만들었던 java 소스였다면 아래의 코드가 올바른 코드였다.

public int test(int a, int b) {
	int c = a + b;
	return c;
}

자바스크립트를 배우면서 많은 웹페이지를 돌아다녔는데 한결같이 초반부에는 ‘유연하다’, ‘배우기 쉽다’ 등의 말들이 적혀있었다. 이는 순전히 하나 이상의 언어를 알고있는 사람들 기준이였다는걸 이제서야 이해할 수 있었다.

java, android는 클래스의 반환형, 파라미터의 자료형을 명확히 명시해야한다. 때문에 int를 파라미터로 받는 test 함수가 있다 해도 String을 받고 싶다면 String을 파라미터로 받는 함수를 다시 선언해야 한다. 이를 오버로딩(overloading)이라고 한다.

자바스크립트에서는 오버로딩이 없다. 쉽게 말하면 오버로딩이란 개념 자체가 필요가 없다. 위의 소스에서도 보이듯, 파라미터의 자료형 자체를 선언하지 않기 때문에 int, String 심지어 function 까지 파라미터로 받을 수 있다. 이때문에 자바스크립트를 유연한 언어라고 말하는 것이다.

여기서 필자는 한가지 테스트를 해보았다. “그래도 var라는 자료형이 있다면 var라는 자료형으로 선언해주어야 하는 것이 아닐까?” 바로 테스트해보았다.

var test = function(var a, var b) {
	var c = a+b;
	return c;
}

위와 같은 소스에서 function의 파라미터에 var라는 자료형으로 선언을 한 뒤 실행시켜보았다. 결과는…

<출처 – Dragon>

에러. document.write(); 함수는 그냥 println();나 printf(); 라고 생각하면 된다.

즉, function 선언시 파라미터는 자료형을 선언하면 안된다. 그냥 변수명만 적으면 자동으로 선언이 되며 공간이 만들어지니 그곳에 숫자, 문자, 함수 등을 상황에 맞게 넣어서 사용하면 된다.

자료형과 반환형을 선언하지 않아도 되는 자바스크립트. 확실히 개발자가 편해진것은 분명하다.