정리/Question

Method vs Function

kimddakki 2022. 5. 19. 14:29
메소드와 함수의 차이점

 - 함수가 메소드를 아우르는 포괄적인 단어이다.

 - 함수는 객체로부터 독립적이며 메소드는 객체에 종속적이다.

   => 메소드는 호출된 객체에 암시적으로 전달된다.

   => 메소드는 클래스 안에 있는 data를 조작할 수 있다.

 - 기본적으로 두 용어의 뜻은 동일하나 '객체( 클래스 )로부터 독립적인가, 아닌가'가 메소드를 나누는 기준이다.

 

"JavaScript: The Good Parts"라는 책을 인용해보면, 자바스크립트에서 함수가 객체의 프로퍼티로 저장된다면 이것은 메소드이다. (메소드는 객체로부터 독립적이지 않다) 함수가 객체의 프로퍼티가 아니라면, 이것은 함수이다.(함수는 독립적이다.)

// 책 You don't know JS 에서 카일심슨이 주장하는 바와는 다르다. 저 책을 읽지 않아서 부가적인 내용이 더 있는지는 모르겠지만, 카일심슨은 아래 코드의 예를 들면서 그냥 메소드라 칭하는 것은 온당치 않다고 말한다.
function foo() {
  console.log("foo");
}

const someFoo = foo;
const obj = {
  someFoo: foo,
};

foo();  // foo
someFoo();  //foo
obj.someFoo();  // foos
console.log(foo === obj.someFoo); // true
console.log(foo === someFoo); // true
console.log(someFoo === obj.someFoo); // true

 - someFoo나 obj.someFoo나 모두 같은 함수를 가리키는 개별 레퍼런스 일 뿐, 뭔가 특별한 다른 객체가 

   '소유한' 함수는 아니라는 것이다.

 

 - 아니면 아래와 같이 함수 표현식을 객체 리터럴의 한 부분으로 선언해도 이 함수가 저절로 객체에 달라붙는 것은

   아니며 해당 함수 객체를 참조하는 레퍼런스가 하나 더 생기는 것 뿐이라고 한다.

 

var myObject = {
    foo: function() {
        console.log("foo");
    }
};

var someFoo = myObject.foo;

someFoo; // function foo(){..}
myObject.foo // function foo() {..}

 

 

메소드와 함수 (Method and Function)의 차이점

You don't know JS(this와 객체 프로토 타입, 비동기와 성능)편을 읽던 중, 여타 언어에서 객체(클래스)에 부속된 함수를 주로 '메소드'라 부르고 자바스크립트 함수 역시 객체의 부속물이라 생각하기

sustainable-dev.tistory.com