[Javascript] this
์๋ฐ์คํฌ๋ฆฝํธ์ this๋ ์ฐธ์ผ๋ก ๋ฏธ๋ฌํ ๋
์์ด๋ค.
๊ธฐํ OOP ์ธ์ด๋ค์์ ์ฌ์ฉ๋๋ this์ ๋์๋ฐฉ์์ด ์ฌ๋ญ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ง์ด ๋ธ๋ผ์ฐ์ this์ Node์ this๊ฐ ๋ ๋ค๋ฅด๋ค!
ํ์ฅํ ๋
ธ๋ฆ์ด๋ค.
์ผ๋จ, ์์ธ์ ์ธ ์ํฉ๋ค์ ์ ์ธํ๋ฉด this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์์ธ๊ฐ ๋๋ฌด ๋ง๊ธด ํ๋ฐ...
์๋ฌดํผ ๊ทธ ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ์๋ window๋ค.
๊ทธ๋์ ๋ค์ง๊ณ ์ง this๋ฅผ ์ฐ์ด๋ณด๋ฉด window ๊ฐ์ฒด๊ฐ ์ฐํ๋ค.

๊ทผ๋ฐ ๋
ธ๋๋ ์ข ๋ค๋ฅด๋ค. ๋
ธ๋์๋ ์ผ๋จ window๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ์ ์ฐ์ด๋ณด์
์? ๋น ๊ฐ์ฒด๊ฐ ๋์๋ค.
์ ๊ฒ ๋์ฒด ๋ญ๊น?
์ฌ์ค node์ ์ ์ญ ๊ฐ์ฒด๋ ๋ชจ๋ ๋ด๋ณด๋ผ๋ ์ฐ๋ module.exports๋ค.
๊ทธ๋์ ๋ญ ๋ด๋ณด๋ด๊ณ ์ฐ์ด๋ณด๋ฉด
์ ๋๋ก ๋์ฌ ๊ฒ์ด๋ค.

๊ทธ๋ฆฌ๊ณ ํจ์์์ ํธ์ถํ ๊ฒฝ์ฐ์ ์ ์ญ ํจ์๋ค์ ๊ฐ์ง๋ ์ ์ญ๊ฐ์ฒด๊ฐ ์ฐํ๋ค.


๊ทผ๋ฐ this๊ฐ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค์ง ์๋ ์์ธ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํ๋ค.
์ฌ์ค... this๋ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋์ด๋ค.
๋ง์ฝ ์ด๋ค ํจ์๋ฅผ ์ ์ญํจ์๋ก์ ํธ์ถํ๋ค๋ฉด, ๊ทธ๊ฑด '์ ์ญ'ํจ์์ด๋ ์์ ๊ฐ์ด ์ ์ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
ํ์ง๋ง ๊ทธ ํจ์๋ฅผ ์ด๋ค ๊ฐ์ฒด์ ๋ฉ์๋์ฒ๋ผ ํธ์ถํ๋ค๋ฉด, ๊ทธ๊ฑด ๊ทธ '๊ฐ์ฒด'๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ ๊ฒ์ด๋ค.


๊ฐ์ฒด ์์ฑ(new)
๊ทธ๋ฆฌ๊ณ new ํค์๋๋ก ์์ฑํ ๋์ ์๋ ๋๊ฐ ๋ ๋ฌ๋ผ์ง๋ค!
new ํค์๋๋ก ์์ฑํ๋ฉด ๊ทธ ์์ this๋ ์์ฑ๋ผ์ ๋ฐํ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค.


ํ์ดํ ํจ์
๊ฒ๋ค๊ฐ ํ์ดํ ํจ์์ ์ผ๋ฐ ํจ์(function)์ this๊ฐ ๋ ๋ค๋ฅด๋ค.
์ฐธ์ผ๋ก ํ์ฅํ ๋
ธ๋ฆ์ด๋ค.
ํ์ดํ ํจ์๋ ๋ฌธ๋งฅ์ด ์๋ ์ค์ฝํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก this๋ฅผ ํ ๋นํ๋ค.
ํ์ดํ ํจ์์์ this๋ ํญ์ ์์ ์ค์ฝํ์ this๋ฅผ ๊ฐ์ ธ์จ๋ค.

๋ฐ๋ผ์ ์ด๋ฐ ์ํฉ์์๋ ์์ ์ค์ฝํ์ธ ์ ์ญ, module.exports๋ฅผ ์ฐธ์กฐํ๋ค.
๊ทธ๋์ ๊ฐ์ฒด์ ๋ผ์๋ฃ์ด์ ํธ์ถํด๋ this๊ฐ ๋ฐ๋์ง ์๋๋ค. ์์ฑ์๋ก๋ ๋ชป ์ฐ๊ณ ...

๊ทธ๋์ ์ฌ์ค ํ์ดํํจ์๋ ๊ทธ๋ฅ this๊ฐ ์๋ค๊ณ ์๊ฐํ๊ณ ์ฐ๋ฉด ๋๋ค.
์ฐธ์กฐ
https://blueshw.github.io/2018/03/12/this/
https://www.zerocho.com/category/NodeJS/post/5b67e8607bbbd3001b43fd7b
https://www.zerocho.com/category/JavaScript/post/5b0645cc7e3e36001bf676eb