본문 바로가기

프로그래밍 공부/JavaScript

JavaScript - 내부 함수

프로그램을 개발하면 혼자서 개발을 하게 되지 않는다. 프로그램의 규모가 커지게 되면 커질수록 다른 사람과 협업으로 개발을 하게 되는데 이때 서로 만든 코드 간 충돌이 발생하게 된다. 내부 함수는 이러한 충돌을 막는 방법이다.

function 외부함수 () {

        function 내부함수1 () {

            함수코드

        }

        function 내부함수2 () {

            함수코드

        }

        함수코드

    }

위와 같은 형태로 함수 내부에 선언하는 함수를 의미한다. 왜 내부 함수가 필요한지 빠르게 예시를 보자면 아래와 같다.

// A직원이 만든 함수

// 제곱을 구하는 함수

    function square(x){

        return x*x;

    }

 

// 피타고라스 함수

    function pythagoras(widthheight){

        return Math.sqrt(square(width)+square(height));

    }

 

// 피타고라스 함수를 호출

    alert(pythagoras(3,4));

 

// B직원이 만든 함수

// 삼각형이 직각인지 확인하는 함수

    function square(widthheighthypotenuse){

        if(width*width+height*height == hypotenuse*hypotenuse){

            return true;

        }

        else {

            return false;

        }

    }

A직원과 B직원이 협업을 통해 만든 코드이다. 하지만 이 코드는 문제가 있다. A직원의 square()함수는 B직원의 square() 함수에 덮어씌워지게 된다. 따라서 pythagoras() 함수 내부에서 B직원의 square() 함수를 사용하게 된다. 

 

두 직원이 작업 전에 협의를 통해 서로 다른 이름을 사용할 수 있지만 그것을 잊고 못했을 경우에는 문제가 발생한다. 이때 내부 함수를 이용해서 함수 이름 충돌을 막을 수 있다. 내부 함수를 사용하면 함수 외부에 이름이 같은 함수가 있어도 내부 함수를 우선 실행한다.

// A직원이 만든 함수

    function pythagoras(widthheight){

        function square(x){

            return x*x;

        }

        return Math.sqrt(square(width)+square(height));

    }

    alert(pythagoras(2,2));

 

// B직원이 만든 함수

    function square(widthheighthypotenuse){

        if(width*width+height*height == hypotenuse*hypotenuse){

            return true;

        }

        else {

            return false;

        }

    }

주의할 점은 내부 함수는 내부 함수를 포함하는 함수에서만 사용할 수 있다. (내부 함수는 외부에서 사용할 수 없다.)

내부 함수.html
0.00MB