자바스크립트 함수표현식에 관한 질문 드립니다

function ask(question, yes, no) {

if (confirm(question)) yes()

else no();

}

function showOk() {

alert( "동의하셨습니다." );

}

function showCancel() {

alert( "취소 버튼을 누르셨습니다." );

}

// 사용법: 함수 showOk와 showCancel가 ask 함수의 인수로 전달됨

ask("동의하십니까?", showOk, showCancel);

/////////////////////////////////////////////////////////////////////////////

function ask(question) {

if (confirm(question)){

showOk()

}else{

showCancel();

}

}

function showOk() {

alert( "동의하셨습니다." );

}

function showCancel() {

alert( "취소 버튼을 누르셨습니다." );

}

// 사용법: 함수 showOk와 showCancel가 ask 함수의 인수로 전달됨

ask("동의하십니까?");

이 두가지 함수의 동작은 같은 것 같은데 둘 중에 맞게? 효율적으로 쓰는게 뭔지 궁금합니다

2개의 답변이 있어요!

  • 두 번째 코드와 첫 번째 코드의 차이는 콜백 함수의 전달 방식에 있습니다. 첫 번째 코드에서는 ask 함수가 yes와 no라는 두 개의 콜백 함수를 인수로 받아 처리하는 반면, 두 번째 코드에서는 showOk와 showCancel이 ask 함수 내부에서 직접 호출되는 구조입니다. 둘 다 동일한 동작을 하지만, 각 코드의 장단점이 있습니다.

    1. 첫 번째 코드:

    function ask(question, yes, no) {

    if (confirm(question)) yes()

    else no();

    }

    function showOk() {

    alert("동의하셨습니다.");

    }

    function showCancel() {

    alert("취소 버튼을 누르셨습니다.");

    }

    ask("동의하십니까?", showOk, showCancel);

    장점: ask 함수가 더 유연해지며, 다른 콜백 함수도 쉽게 전달할 수 있습니다. 예를 들어, yes와 no에 다른 동작을 설정할 수 있는 장점이 있습니다.

    단점: 함수 인수를 더 많이 전달해야 하므로 코드가 조금 길어질 수 있습니다.

    2. 두 번째 코드:

    function ask(question) {

    if (confirm(question)) {

    showOk();

    } else {

    showCancel();

    }

    }

    function showOk() {

    alert("동의하셨습니다.");

    }

    function showCancel() {

    alert("취소 버튼을 누르셨습니다.");

    }

    ask("동의하십니까?");

    장점: 코드가 간결하고, 인수가 하나만 필요하므로 호출이 간편합니다. 특정 동작이 정해져 있을 때 유리합니다.

    단점: showOk와 showCancel 외의 다른 동작을 추가하려면 ask 함수를 수정해야 하므로 확장성이 떨어집니다.

    결론:

    첫 번째 방식(콜백 함수 전달 방식)은 유연하고 확장성 있는 코드로, 동작이 바뀔 가능성이 있을 때 적합합니다.

    두 번째 방식은 코드가 간단하고 동작이 고정되어 있을 때 적합합니다.

    따라서, 동작이 고정되어 있고 간단한 경우에는 두 번째 방식이 더 효율적이고 간결하며, 여러 가지 다른 동작을 처리해야 하는 경우에는 첫 번째 방식이 더 적합합니다.

  • 안녕하세요.

    5월8일 주식회사의 파오리입니다!

    첫 번째 코드가 훨씬 더 효율적이고 실용적입니다. 이유는 간단합니다. 유연성과 재사용성, 그리고 유지보수의 용이함이라는 프로그래밍의 핵심 가치를 모두 충족하기 때문입니다.

    조금 더 살펴보겠습니다. 첫 번째 코드는 함수형 프로그래밍의 진수를 보여줍니다. ask 함수는 "질문을 던지고 외부에서 제공된 함수를 호출한다"는 본연의 역할에만 충실합니다. 여기서 포인트는 외부에서 함수(showOk와 showCancel)를 인수로 전달받는 구조입니다. 이것이 바로 유연성의 핵심입니다.


    예를 들어, ask 함수에 새로운 동작이 필요하다면, 외부에서 간단히 다른 함수를 전달하기만 하면 됩니다. 이렇게 코드는 독립적이고 재사용 가능해지며, 특정 상황에 맞게 쉽게 변경할 수 있습니다.

    반면 두 번째 코드는 겉보기에 간단해 보이지만 내부적으로 함정이 숨어 있습니다. ask 함수가 동작을 직접 정의하고 호출하기 때문에 새로운 요구사항이 생길 때마다 ask를 수정해야 합니다. 코드가 강하게 결합되어 있어 유지보수성이 떨어지고, 유연성이 희생됩니다.

    비유를 들자면 첫 번째 방식은 레고 블록처럼 원하는 대로 조립 가능한 구조이고, 두 번째 방식은 이미 한 덩어리로 만들어져 더 이상 수정하기 어려운 완제품 장난감과 같습니다. 어느 쪽이 더 오랫동안 쓰기 좋은지 느낌이 오시죠?