์ค๋ ์์๋ณผ ๊ฒ์ this
์ด๋ค.
๋๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ธ java๋ฅผ ๋จผ์ ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์ js์์ ๋งํ๋ this๋ฅผ ๋จ์ง class ๋ด๋ถ์ ํ๋กํผํฐ์ ๋ํ ํฌ์ธํฐ์ญํ ๋ก์จ ์ดํด๋ฅผ ํ์์ง๋ง, js์์ ๋งํ๋ this๋ ํจ์ฌ ๋ค์ํ๊ณ ์ฌ์คํ ๊ธฐ๋ฅ์ ์ํํ๊ณ ์์๋ค.
์ค๋ ๊ทธ ์ฌ์คํ ๊ธฐ๋ฅ๋ค์ ๋ํด์ ์ง์ด๋ณด์.
ํด๋น ๊ธ์ 4๋ถ์์ผ๋ก ๋๋์ด์ ธ ์์ต๋๋ค. this์ ๋ํ ๋ชจ๋ ๊ฒ์ ์๋ฒฝํ ํ์ ํ๊ณ ์ถ๋ค๋ฉด ํ ๋ฒ ๋ด๋ณด๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
- ์ ์ญ ๊ณต๊ฐ์์์ this
- ๋ฉ์๋ ๋ด๋ถ์์์ this
- ํจ์ ๋ด๋ถ์์์ this
- ์ฝ๋ฐฑ ํจ์์์์ this
What is this
์ต๋์ docs๋ฅผ ์ ๊ณตํ๋ค๋ w3c์๋ ๋ค์๊ณผ ๊ฐ์ด this์ ๊ธฐ๋ฅ์ ๋ถ๋ฅํ๋ค.
- ๋ฉ์๋์์
this
๋ ๊ทธ์ ์ฃผ์ธ ๊ฐ์ฒด(Owner Obj)๋ฅผ ๋ปํ๋ค. this
๊ฐ ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋๋ฉด ๊ทธ๊ฒ์ global ๊ฐ์ฒด๋ฅผ ๋ปํ๋ค.- ํจ์์์
this
๋ global ๊ฐ์ฒด๋ฅผ ๋ปํ๋ค. strict mode
๊ฐ ์ ์ฉ๋ ํจ์์์this
๋ undefined์ด๋ค.- ์ด๋ฒคํธ์์
this
๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ element๋ฅผ ๋ปํ๋ค. - call()๊ณผ apply() ๊ฐ์ ๋ฉ์๋์์
this
๋ any object๋ฅผ ๋ปํ๋ค.
๊ฐ๊ฐ์ ์๋ฅผ ํตํด์ ์กฐ๊ธ ์ฝ๊ฒ ์ดํดํด๋ณด์.
๋ชจ๋ ์๋ฆฌ๋ฅผ ํ์ ํ๋๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค.
๋จ์ํ ์๊ธฐ๋ฅผ ํด์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋น์ฅ์ ํจ๊ณผ์ ์ผ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ ์ธ์ ์ด๋ค ์ธ์ด๊ฐ ์ด๋ป๊ฒ ์ฌ๋ผ์ง๊ณ ๋ฑ์ฅํ ์ง ๋ชจ๋ฅด๋ ํ์ฌ์๋ ์ธ์ด์ ์ฌ์ฉ๋ฒ๋ณด๋จ ์ปดํจํ ์ ์ฌ๊ณ ๊ฐ ์ค์ํ๋ค.
๋ฉ์๋ ๋ด๋ถ์์์ this
๋ฉ์๋ ๋ด๋ถ์์์ this๋ฅผ ์ดํดํ๊ธฐ ์ํด์ ๋จผ์ ํจ์์ ๋ฉ์๋์ ์ฐจ์ด์ ๋ํด์ ์๊ณ ์์ด์ผ ํ๋ค.
ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด์๋
- ํจ์๋ก์จ ํจ์๋ฅผ ํธ์ถ
- ๋ฉ์๋๋ก์จ ํจ์๋ฅผ ํธ์ถ
์ด๋ ๊ฒ ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
์๋ ์ด๊ฒ ๋ฌด์จ์ด์ผ๊ธฐ๋?๋ผ๊ณ ํ ์ ์์ง๋ง ์ฌ์ค ๋ฉ์๋๋ผ๋ ๊ฒ์ด ๊ฐ์ฒด ๋ด๋ถ์์ ๋์ํ๋ ํจ์๋ผ๋ ์ฌ์ค์ ๊ธฐ์ตํ ์ ์๋ค๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค.
๋์ค์ ๋ฐฐ์ฐ๊ฒ๋ ๊ฒ์ด์ง๋ง ecmascript6์์ ์๊ฐ๋ class
๋ด๋ถ์ ๋์ํ๋ ํจ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
class MyReact extends Component {
render(){
return();
}
}
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ ํด๋์ค์ธ๋ฐ, ์ฌ๊ธฐ์ render()
๋ฉ์๋๋ ์ฌ์ค function render()
์ ํํ์ง๋ง ํด๋์ค(๊ฐ์ฒด) ๋ด๋ถ์ ์์นํ๊ธฐ ๋๋ฌธ์ ์์์ ์ผ๋ก function
ํค์๋๋ฅผ ์ ์ธํ์ฌ ์ฌ์ฉํ๋ค.
ํจ์์ ๋ฉ์๋์ ๋ํด์ ์ ํํ ๊ตฌ๋ถ์ ํด๋ณด์.
๋ฉ์๋ ๋ด๋ถ์์์ this๋ฅผ ์์๋ณด๊ธฐ ์ ์ ์ด๊ฒ ๋ถํฐ ํ์คํ ํ์.
ํจ์์ ๋ฉ์๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ ๋ฆฝ์ฑ์ด๋ค.
ํจ์๋ ๊ทธ ์์ฒด๋ก๋ ํผ์ ์คํ๋ ์ ์์ง๋ง, ๋ฉ์๋๋ ์์ ์ ํธ์ถํ ๋์ ๊ฐ์ฒด์ ๊ดํ ๋์์ ์ํํ๋ค.
์์ ๊ฐ์ ๋ฆฌ์กํธ ์ฝ๋๋ ์ฌ์ค ๋ฆฌ์กํธ์ ์ฝ์ด๋ฅผ ๋ถ์ํด๋ณธ๋ค๋ฉด MyReact.render()
๋ฅผ ํธ์ถํจ์ผ๋ก์จ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ์ ์๊ฒ ๋๋ค.
์ข ๋ ์ ํํ ์ด์ผ๊ธฐ ํ์๋ฉด
class HelloComponent extends Component {
render(){
return <div> Hello </div>;
}
}
์์ ๋งํ๋ render()
(Hello๋ฅผ ์ถ๋ ฅ)์
class WorldComponent extends Component {
render(){
return <div> World </div>;
}
}
console.log(HelloComponent.render());
console.log(WorldComponent.render());
์์ ๋งํ๋ render()
(World๋ฅผ ์ถ๋ ฅ)์๋ ์๋ก ๋ค๋ฅธ render์ด๊ธฐ ๋๋ฌธ์ ์ ํํ ํด๋์ค(๊ฐ์ฒด)์ ์ด๋ฆ์ ๊ดํ .์ฐ์ฐ์ผ๋ก ํธ์ถ์ ํด์ผ ํ๋ค.
๊ทธ์ ๋ฐํด ํจ์๋
function hello() {
return "hello";
}
function world() {
return "world";
}
console.log(hello());
console.log(world());
์ฒ๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ํจ์๋ช ์ผ๋ก๋ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
๋ฉ์๋์ ๋ํ ์คํด
์ฌ๋๋ค์ด ๋ง์ด ํ๊ณ ์๋ ์คํด๊ฐ ๊ฐ์ฒด ๋ด๋ถ์ ์ ์๋ ํจ์๋ ๋ชจ๋ ๋ฉ์๋๋ผ๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ๊ทธ๊ฑด ํ๋ฆฐ ์ด์ผ๊ธฐ์ผ ์๋ ์๊ณ ๋ง๋ ์ด์ผ๊ธฐ์ผ ์๋ ์๋ค.
ํจ์๋ ํจ์๋ก์จ ํธ์ถ๋๋ฉด ํจ์์ด๊ณ , ๋ฉ์๋๋ก์ ํธ์ถ๋๋ฉด ๋ฉ์๋์ด๋ค.
๋ง์ด ์ด๋ ต์ง ๊ฐ๋จํ๋ค.
์ฌ๊ธฐ์ ์๋์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ค๋ฉด?
class HelloComponent extends Component {
sayHello() {
return "Hello"
}
render(){
return <div> {sayHello()} </div>; // ํด๋์ค ๋ด๋ถ์์ ํจ์๋ก์จ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ํจ์
}
}
console.log(HelloComponent.sayHello()) // . ์ฐ์ฐ์๋ก ํธ์ถํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋
HelloComponent
๋ ๊ฐ์ฒด(ํด๋์ค)์ธ๋ฐ, ์ฌ๊ธฐ์ render()
์ sayHello()
๋ ์ฌ์ค ํจ์์ด๋ค.
์ด์ ํจ์์ ๋ฉ์๋์ ๋ํ ์ ํํ ์ฐจ์ด๋ฅผ ์๊ฒ ๋์์ผ๋ฏ๋ก ๋ณธ๋ก ์ธ this์ ๋ํด์ ์์๋ณด์.
๋ฉ์๋ ๋ด๋ถ์์์ this
this์๋ ํธ์ถํ ์ฃผ์ฒด์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด๋ค.
์ฆ .
์ฐ์ฐ์ ๋ฐ๋ก ์์ ์๋ ๊ฐ์ฒด๊ฐ this๊ฐ ๋๋ ๊ฒ์ด๋ค.
class HelloComponent extends Component {
render(){
return <div> "hello world" </div>;
}
}
console.log(HelloComponent.render(), this);
์ด๋ฌํ ์ฝ๋๊ฐ ์กด์ฌํ ๋ ๊ฒฐ๊ณผ๋ ๋ฐ๋ก ํ์ฌ ์ฐ๊ด๋ ๊ฐ์ฒด HelloComponent
๊ฐ thisBinding๋ ๊ฐ์ฒด์ด๋ค.
ํจ์์ ๋ฉ์๋์ ๋ํ ์ค๋ช
์ ์ถ๊ฐํ๋๋ผ ์ด์ผ๊ธฐ๊ฐ ๋ง์ด ๊ธธ์ด์ก์ง๋ง ์ฐจ๋ถํ ์ฝ์ผ๋ฉด ๋ชจ๋ ์ดํด๊ฐ ๋ ์ ๋์ ๋ถ๋์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ดํด๊ฐ ์๋๋ค๊ณ , ์ค๋ช
์ด ๋๋ฌด ์ด๋ ต๋ค๊ณ ๋๋ฌด ์ด๋ ค์ํ์ง ๋ง๊ณ ๋ณด๊ณ ๋ ๋ณด๊ณ ๋ค๋ฅธ ์ผ ํ๊ณ ๋ค์ ๋ณด๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ฉด ์ด๋ ์๊ฐ ์ ๋ ์นด ํ๋ ์์ ์ด ์ฌ ๊ฒ์ด๋ค. ๋ ๋ํ ๊ทธ๋์๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์ ์ผ ์ ์๊ณ ์๋ค. ๋ชจ๋ ํฌ๊ธฐํ์ง ๋ง๊ณ ํ์ดํ
!!
๋๊ธ