프로그램을 개발하면 혼자서 개발을 하게 되지 않는다. 프로그램의 규모가 커지게 되면 커질수록 다른 사람과 협업으로 개발을 하게 되는데 이때 서로 만든 코드 간 충돌이 발생하게 된다. 내부 함수는 이러한 충돌을 막는 방법이다.
function 외부함수 () { function 내부함수1 () { 함수코드 } function 내부함수2 () { 함수코드 } 함수코드 } |
위와 같은 형태로 함수 내부에 선언하는 함수를 의미한다. 왜 내부 함수가 필요한지 빠르게 예시를 보자면 아래와 같다.
// A직원이 만든 함수 // 제곱을 구하는 함수 function square(x){ return x*x; }
// 피타고라스 함수 function pythagoras(width, height){ return Math.sqrt(square(width)+square(height)); }
// 피타고라스 함수를 호출 alert(pythagoras(3,4));
// B직원이 만든 함수 // 삼각형이 직각인지 확인하는 함수 function square(width, height, hypotenuse){ if(width*width+height*height == hypotenuse*hypotenuse){ return true; } else { return false; } } |
A직원과 B직원이 협업을 통해 만든 코드이다. 하지만 이 코드는 문제가 있다. A직원의 square()함수는 B직원의 square() 함수에 덮어씌워지게 된다. 따라서 pythagoras() 함수 내부에서 B직원의 square() 함수를 사용하게 된다.
두 직원이 작업 전에 협의를 통해 서로 다른 이름을 사용할 수 있지만 그것을 잊고 못했을 경우에는 문제가 발생한다. 이때 내부 함수를 이용해서 함수 이름 충돌을 막을 수 있다. 내부 함수를 사용하면 함수 외부에 이름이 같은 함수가 있어도 내부 함수를 우선 실행한다.
// A직원이 만든 함수 function pythagoras(width, height){ function square(x){ return x*x; } return Math.sqrt(square(width)+square(height)); } alert(pythagoras(2,2));
// B직원이 만든 함수 function square(width, height, hypotenuse){ if(width*width+height*height == hypotenuse*hypotenuse){ return true; } else { return false; } } |
주의할 점은 내부 함수는 내부 함수를 포함하는 함수에서만 사용할 수 있다. (내부 함수는 외부에서 사용할 수 없다.)
'프로그래밍 공부 > JavaScript' 카테고리의 다른 글
JavaScript - 함수를 리턴하는 함수 / 클로저 (0) | 2019.12.03 |
---|---|
JavaScript - 콜백 함수 (0) | 2019.12.03 |
JavaScript - 매개변수 / 리턴 값 (0) | 2019.12.02 |
JavaScript - 익명 함수 / 선언적 함수 (0) | 2019.12.02 |
JavaScript - while 반복문 / for 반복문으로 구구단 출력 (0) | 2019.12.02 |