오늘 뭐했냐/개발에 대한 주저리

this와 this바인딩

스스로에게 2023. 6. 14. 00:41

솔직히 this가 뭐냐고 물어보면 아직 모르겠다 상황에 따라 this가 달라져서 나는 어디서의 this냐고 명확하게 하고 답을 할 수 있을 것 같아 그러면 this는 상황마다 어떻게 다른지 보자 

 

함수와 메서드의 차이에서 메서드는 객체의 프로퍼티인 함수라고 알고 있었는데 더 쉽게 알게 되었다 독립성의 차이라고 하는데 내가 이해한 것은 함수는 혼자 뛰쳐나갈 수 있고 메서드는 누가 불러줘야 나간다 이렇게 이해했다

 

따라서 함수의 this는 전역이고 메서드의 this는 매서드를 부른 객체이다 

 

그럼 콜백함수는 이것도 전역이다 하지만 무조건은 아니다 대부분이다

 

즉시실행함수에서는 전역이다 아까 말한 것처럼 얘도 혼자 뛰쳐나가니까

 

가장 많이 쓰이는 것 같은 생성자 함수에서의 this는 생성자 함수가 생성할 인스턴스, 쉽게 말하면 집사려고 대출  받는 느낌이다 "나 이제 집  살건데" 하면서 그 아직 없는 이제 살 집을 담보로 대출 받는 것 같다 그리고 집이 생기면 대출도 this도 가리키는 실체가 생기니까

 

그리고 화살표 함수에서는 this 바인딩이 이루어지지 않았기에 this가 없고 선언된 곳의 상위의 this를 따라간다 라고 하는데 내가 이해한 것은 그냥 처음 들어온 신입이 사수 따라 댕기는거다 바인딩이 없다는게 경험이 없다랑 비슷하게 생각하면 경험 있는 사수 따라다니는 것 같다

 

바인딩은 게임에서 우리가 속박 걸면 묶는 것처럼 어떤 거를 묶는 거라고 생각하면 편하다 

 

근데 또 this가 고정은 아니다 명시적으로 이 바인딩을 할 수가 있다 

 

먼저 call과 apply가 있는데 거의 같다 그리고 둘 다 즉시 실행 함수이다

function.call( {this로 사용할 객체}, 함수의매개변수)

function.apply( {this로 사용할 객체}, [함수의매개변수]) 

하나만 알면 문제 없을 것 같지만 두 개 다 알고는 있어야 한다 내가 짠 코드가 아니라 다른 사람이 짠 코드를 유지 보수할 때 모르면 안되니까

 

그 다음으로 bind는 조금 다르다 먼저 즉시실행함수가 아니고 새로운 함수를 반환하기에 다른 담을 변수를 또 만들어줘야한다 사용법은 만약에 매개변수를 3개 받는 함수가 있다고 할 때 function.bind( {this로 사용할 객체}, 첫 번째 매개변수)로 하면 매개변수를 미리 고정적으로 받을 수 있다 물론 하나가 아니라 두 개, 세 개 혹은 없어도 가능하다

 

아직은 내가 실력이 부족해서 저런 것까지 쓸까 싶은데 혹시나 다른 사람의 코드를 이해하기 위해서 다시 요약하면 첫 번째값은 this로 사용할 객체이건 꼭 알고 가야겠다

 

가끔 this로 사용할 객체에 function.call(this) 이렇게 this로 입력하는 것을 봤는데 잘 이해가 안되서 직접 함수 안에서와 메서드 안에서 해보니까 이것도 화살표 함수랑 같은 방식으로 생각된다