쫑쫑쫑
294
2019-06-20 12:31:24
3
362

선배님들 또 javascript 질문이 있습니다. (오버로딩?????)


책을보니

javascript에서 오버로딩이 없다.

하지만 흉내가 가능하다.

라고 간단히 설명이 있던데요...

오버로딩은 제가 찾아보기로 같은 function 이름에 다른 값을 넣는다.

요런 개념? 덮어쓰기? 뭐 이렇게 이해를 했는데 그게 맞나요?

0
0
  • 답변 3

  • 제르맹
    315
    2019-06-20 12:52:25

    오버로딩은 같은 이름의 메소드이지만 입력받는 파라미터들이 상이하여

    어떤 파라미터들을 입력받는지에 따라 메소드를 구분하는 것인데

    자바스크립트의 경우엔 같은 이름의 함수에 어떤 파라미터를 입력하여 호출하더라도 동일한 함수가 호출됩니다.


    function test(parameter1, parameter2){
        console.log(parameter1,parameter2)
    }
    
    test("a"); // "a", undefined
    test("a","b") //"a","b"
    test("a","b","c") //"a","b"

    위의 예시처럼 자바스크립트는 함수를 식별하는 기준이 오로지 함수명이기때문에 항상 같은 함수를 호출합니다.

    자바스크립트에서 오버로딩을 흉내낸다는 것은 같은 메소드에서 다른 파라미터가 입력되었을때 다른 로직을 실행하고 싶다는 것이기 때문에


    function test(){
        const arguments = arguments; // 전달된 인자들이 배열형태로 저장됩니다.
        if(arguments.length === 1){
             //인자가 1개 전달 되었을때 실행할 로직
        }
        if(arguments.length === 2){
            //인자가 2개 전달 되었을때 실행할 로직
            if(typeof arguments[1] === "string"){
                 //첫번째 인자가 문자열일때 실행할 로직
            }
        }
    }
    
    test("a")
    test(1)
    test("a",1)

    위와 같이 흉내내 볼 수 있습니다.


    0
  • moonti
    2k
    2019-06-20 13:01:20

    저는 흉내낸다라기 보다. 자바를 예를들어 파라미터의 순서나 종류 갯수들이 호출할때 정확히 일치해야 합니다.

    같은 동작을 하는 여러 타입이 있을 경우 파라미터의 타입이나 갯수들이 다르면 같은 이름이라고 하더라도 구분할 수 있기 때문에 이를 허용하죠.


    자바스크립트의 경우는 함수의 정의할 때 아규먼트를 하나 정의한다고 해도, 호출할 때 안넣어도 되고, 더 넣어도 됩니다.

    오버라이드를 흉내내기 보다 함수 내부에서 타입에 따라 분기 처리 하는 것 뿐이죠.

    0
  • oneday
    516
    2019-06-20 14:04:51

    이런 형태가 될듯?

    function sendMessage(msg, obj) {
        if ( arguments.length == 2 ) {
            obj(msg);
        } else {
            alert( msg );
        }
    }


    sendMessage("Hello, World!");
    
    var f = function (msg) {
       alert("Overloading Message: " + msg);
    }
    
    sendMessage("How are you?", f);


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.