1 분 소요

2022. 05. 26. 수업내용 정리 #1/2

함수.. 재귀함수, 콜백함수


  • 재귀함수(recursive function)

    함수가 자기 자신을 호출하는 것을 재귀호출이라고 합니다.

    재귀 함수는 자기 자신을 호출하는 행위, 즉 재귀 호출을 수행하는 함수를 말합니다.

    주로 반복되는 처리를 위해 사용합니다.


    /* 팩토리얼(계승).. 1부터 자신까지의 모든 양의 정수의 곱 */
    function factorial(n){
        if(n<=1) return 1;
        return n * factorial(n-1);
    }
      
    document.write(factorial(0),'<br>');
    document.write(factorial(1),'<br>');
    document.write(factorial(2),'<br>');
    document.write(factorial(3),'<br>');
    document.write(factorial(4),'<br>');
    document.write(factorial(5),'<br>');
    document.write(factorial(6),'<br>');
    

    웹페이지 화면 ▼

    함수기본예시5


    동작원리를 이미지로 나타내면 아래와 같습니다.

    함수기본예시6

    재귀함수는 자신을 무한호출하기 때문에 반드시 탈출 조건을 만들어줘야 합니다.

    위의 예시 코드에서는 ‘ if(n<=1) return 1; ‘ 부분에 해당합니다.

    반복문을 사용하지 반복되는 구문을 처리할 수 있으나, 무한루프에 빠지기가 쉽고 이로 인한 에러가 발생할 위험이 큽니다.

    그렇기 때문에 반복문을 사용하는 것보다 확실히 효율적일 때만 사용하는 것이 좋습니다.

  • 콜백함수

    다른 함수를 만들 때 입력(parameter)을 함수로 받아서 사용할 수 있는데, 이 때 인자로 사용되는 함수를 말합니다.

    함수이름 없이 익명으로도 전달 가능한 함수를 말하기도 합니다.

    function introduce (lastName, firstName, callback) { // 세번째 인자를 callback이라는 함수로 지정
        var fullName = lastName + firstName;  
        callback(fullName); // 인자는 fullName
    }
       
    introduce("", "길동", function(name) {
        document.write(name);
    });
    // 결과 -> 홍길동
      
    function say_hello (name) {
        document.write("안녕하세요 제 이름은 " + name + "입니다");
    }
       
    function say_bye (name) {
        document.write("지금까지 " + name + "이었습니다. 안녕히계세요");
    }
       
    introduce("", "길동", say_hello);
    // 결과 -> 안녕하세요 제 이름은 홍길동입니다
       
    introduce("", "길동", say_bye);
    // 결과 -> 지금까지 홍길동이었습니다. 안녕히계세요
    

    웹페이지 화면 ▼

    함수기본예시7


    ★함수를 나눠줌으로써 코드의 재활용이 가능하고, 관리도 쉬워지는 장점이 있습니다.

    ★단, 너무 많이 콜백을 연결하면 나중에 디버깅 하기가 힘들어지기 때문에 적당히 나누어서 사용하는 것이 좋습니다.


댓글남기기