본문 바로가기

IT 인터넷/javascript

[javascript 언어공부] 함수(2)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이번시간에는 함수의 입력과 출력에 대해서 알아보자.


프로그래밍에서의 함수는 어떻게 입력을 받고, 어떻게 출력을 받을까?


먼저 출력에 대해서 알아보자.


출력은 return이라는 키워드를 사용한다.

하단의 예제 코드르 보자. 


function get_member1(){

    return 'estelar';

}

 

function get_member2(){

    return 'hongjoo';

}

 

alert(get_member1());

alert(get_member2());


하나는 get_member1이라는 함수이고, 하나는 get_member2라는 함수이다.

그리고 함수 내부에는

return이란는 키워드가 있다.


함수 내부를 읽던 컴퓨터는 return을 읽으면 함수를 종료시킨다.

그리고 return 뒤에 있는 값을 함수 바깥쪽으로 뱉어낸다.


그리고 이 뒤에 어떤 코드가 있어도 실행되지 않는다.



따라서 위의 코드에서 alert 안의 함수는 return 값으로 바뀌고, 

alert('estelar');

alert('hongjoo');


이를 실행시키면 순서대로 경고창에 estelar, hongjoo가 뜰 것이다.



그렇다면 return값이 여러개이면 어떻게 될까? 


function get_member1(){

    return 'estelar';

    return 'hongjoo';

    return 'mini';

    return 'yesri';

}


이를 실행한 결과는 경고창에 estelar 하나만 나오고 끝난다.


왜냐면 컴퓨터가 처음에 return 이라는 키워드를 만나고 그 뒤에 있는 'estelar'를 함수 바깥으로 배출해주고

함수는 종료됐기 때문에 return뒤에 나오는 코드는 실행되지 않는다.



다음으로 입력에 대해서 알아보자. 


코드를 살펴보자.


function get_argument(arg){

    return arg;

}

 

alert(get_argument(1));

alert(get_argument(2));


우선 get_argument라는 함수가 있고, 괄호 안에 드디어 무언가가 등장했다. (arg)

그리고 return arg;가 있다.


괄호 안의 arg가 바로 입력과 관련되어 있는 것이다. 


이 함수를 호출하는 곳을 살펴보면


get_argument(1) 이 보인다. 지금까지는 함수명(); 이렇게 호출 했는데 괄호 안에 무언가가 들어간 것이다. 

이는 get_argument라는 함수를 호출할 때, 그 함수의 괄호 안에다가 숫자 1을 넣어준다는 뜻이다.


근데 숫자 1이 들어갈 위치에 지금 arg가 들어가있고, 이 arg는 변수가 된다.

내부적으로 arg = 1 이라는 뜻이 된다.


따라서 이 함수의 중괄호 안에서 arg는 숫자 1이 되는 것이다.


하단 코드에 있는 get_argument(2)도 마찬가지다. 내부적으로 arg = 2라는 뜻이 된다.


alert(get_argument(1));

alert(get_argument(2));

이를 실행시키면 경고창에 순서대로 숫자1이 뜨고, 2가 뜰 것이다.



 그런데, 입력한 값을 그대로 출력하는 것은 효용이 크지 않다.

진정한 함수라면 입력갚에 따라 / 어떤 취지에 따라 계산된 결과가 출력돼야 한다는 것이 함수의 기본적인 목표이기 때문에 코드를 수정해보면,

만약 입력한 수의 1000배 되는 수를 return 하라고 한다면,


function get_argument(arg){

    return arg*1000;

}


이렇게 코드를 입력 후 함수를 호출하면 된다.


여기서 arg는 매개변수(parameter)라 부르고, 


매개변수로 전달된 값들 (1,2)들은 인자(argument)라고 불린다.



그런데, 입력과 관련해서는 몇가지 테크닉이 더 있다.


이번엔 복수의 인자, 여러개의 인자에 대해서 알아보자.



function get_arguments(arg1, arg2){

    return arg1 + arg2

}

 

alert(get_arguments(10, 20));


아까와 달라진점은, 인자가 2개 있고, 매개변수도 2개 있는 것이다.


이를 자세히 보면 


첫번째 인자 10은 arg1으로 가고, 두번째 인자 20은 arg2로 간다.


따라서 return arg1 + arg2를 계산해보면 


이 함수는 30을 return하게 된다.



즉, 함수는 여러개의 인자를 입력받을 수 있지만 결과값, return은 한번밖에 할 수 없다. 




마지막으로 함수를 정의하는 다른 방법을 알아보자.



var numbering = function (){

    i = 0;

    while(i < 10){

        document.write(i);

        i += 1;

    }   

}

numbering();


이를 해석해보면, numbering이라는 변수에 함수에 대한 정의 부분이 대입된 것이다.

따라서 numbering이라는 변수가 함수를 갖게 된 것이고,

우리는 numbering이라는 변수 뒤에 함수를 호출하는 기호 (): 를 붙이게 되면,


마치 


function numbering (){

    i = 0;

    while(i < 10){

        document.write(i);

        i += 1;

    }   

}

numbering();


이렇게 함수를 정의한 것과 똑같은 효과이다.



또 이렇게 정의할 수도 있다. 


function (){

    i = 0;

    while(i < 10){

        document.write(i);

        i += 1;

    }   

}


이렇게 이름붙이지도 않고, 변수도 없는 함수에 괄호를 붙이고, 그 함수를 호출하는 것이다.  


(function (){

    i = 0;

    while(i < 10){

        document.write(i);

        i += 1;

    }   

})();


이렇게 하게 되면 함수를 정의하는 것과, 호출하는 것이 한번에 가능하며,

이를 익명함수라 한다. 보통 이름이 필요없고 바로 실행해야 할 때 이런 코드를 사용한다.