객체에 저장된 값이 함수인 경우, 이를 메서드(method)라고 부른다.
쉽게 말해 객체에 저장된 property들을 통해서 함수로 호출하는 것 그 자체를 메서드라 부른다.
method에 대해 이야기 하기 전 객체에 함수가 들어갈 수 있는지 없는지에 대해 질문 해보자.
.
.
Q.객체에 함수가 들어갈 수 있는가?
A.YES
배열의 요소(element) 혹은 객체의 속성(property)에 함수를 정의하여 저장 가능하다.
예를들어 이러한 형태가 있다.
let user = {
name:"john",
age:27,
hi_func(){
console.log("Hi")
}
}
나에게 있어 요러한 모양새는 조금 낯설고 새롭다.
Q. 함수가 객체 내에 저장될 수 있는 이유
A. user 객체를 선언하고 안에 프로퍼티를 입력 했을 때의 내부 구조가 어떻게 움직이는지를 한 번 보자.
우선 지난 포스팅에서도 이야기했다 싶이 객체라는 공간에는 하나 이상의 데이터를 담지 못한다. 그렇기 때문에 아래 그림에 나와있는 0x40001234과같은 메모리 주소를 객체에 담고 있고 실질적으로 객체의 정보들은 할당된 주소값이 참조하는 메모리에 저장되어 있다. 한 마디로 주소 참조를 통해 해당 정보를 호출하는 것이다.
그렇다면 객체 내에 있는 함수는 어떨까?
함수도 객체와 마찬가지로 함수를 담고 있는 실질적 메모리로 주소 참조를 통해 접근하여 호출하게 되는 것이다.
메서드에서 객체 내부의 속성(property) 값을 접근할 수 있는 지시자
let user = {
name:"john",
age:27, //여기까지 데이터 저장 부분
hi_func(){
console.log("hi" + this.name)
} //데이터 컨드롤 부분
}
여기에서 this는 그림에서 나와있는 0x40001234가 메모리 주소라고 보면 되는데 hi_func은 그 메모리 주소를 참조하여 객체 내의 name을 찾는다.