ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

 

์ด์ „์—๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ์ ์ธ ์„ ์–ธ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๋˜ํ•˜๋‚˜์˜ ํŠน์ง•์ธ this์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ this๋ผ ํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ๊ต‰์žฅํžˆ ๋งŽ์ด ๋“ค์–ด๋ดค์„ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

public class Book {
    private String title;
    private String author;
    private int price;
    private String publisher;
    
    public Book(String title, String author, int price, String publisher) {
        this.title = title;
        this.author = author;
        this.price = price;
        this.publisher = publisher;
    }
}

 

๋Œ€ํ‘œ์ ์œผ๋กœ ์ž๋ฐ”์—์„œ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•  ๋•Œ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜๋ช…๊ณผ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋™์ผํ•  ๋•Œ ์œ„์™€ ๊ฐ™์ด this๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๊ฐ€ ์ดˆ๊ธฐํ™” ํ•˜๋ ค๋Š” ๋ณ€์ˆ˜๊ฐ€ ํด๋ž˜์Šค์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์ฃ . ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ this๋ฅผ '์ž๊ธฐ์ž์‹ ' ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฒˆ์—ญํ•˜๊ธฐ๋„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

์ผ๋‹จ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ this๊ฐ€ ์–ด๋–ป๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ๋…ผํ•˜๊ธฐ ์ „์— this๋ผ๋Š” ๊ฒƒ์ด javascript์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ •์˜๋˜๊ณ  ์“ฐ์ด๊ณ  ์žˆ๋Š”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์˜๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ํ•ต์‹ฌ์€ ๋…ธ๋ž‘์ƒ‰์„ ์น ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ €๊ฒŒ ๋ฌด์Šจ๋ง์ธ์ง€ ์ฝ”๋“œ์™€ ๋ณด๋ฉด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(์ด ๋ถ€๋ถ„์€ ์ฝ”๋“œ์ข… ๋‹˜์˜ ์˜์ƒ๊ฐ•์˜๋ฅผ ํ† ๋Œ€๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.)

this ์˜ ๊ฐ’์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

var one = {
    num : 1,
    number : function() {
        console.log(this)
    }
};
one.number();

์ด์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํฌ๋กฌ ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—์„œ ์ฝ˜์†”์„ ํ™•์ธํ•ด๋ณด๋ฉด

 

์ €๋Š” this๋ฅผ ์ฝ˜์†”๋กœ ์ฐ์—ˆ๊ณ  ๊ทธ ๊ฐ’์€ ๊ฐ์ฑ„ํ˜•ํƒœ๋กœ num์ด 1์ด๋ผ๋Š” ๊ฒƒ๊ณผ number๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. javascript์˜ this ์ •์˜์—์„œ this์˜ ๊ฐ’์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฉ๋ฒ•์ด ๊ฒฐ์ •ํ•œ๋‹ค๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ•จ์ˆ˜ํ˜ธ์ถœ์„ one์ด๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ํ•œ ๊ฒƒ์ด๋ฉฐ ๊ฑฐ๊ธฐ์„œ this๋ฅผ ์ฐ์œผ๋‹ˆ one์˜ ๊ฐ์ฒด์ •๋ณด๊ฐ€ ๋‚˜์˜จ ๊ฒƒ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ๋ฒ•์„ ๋‹ฌ๋ฆฌ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

var one = {
    num : 1,
    number : function() {
        console.log(this);
    }
};
var two = one.number;
two();

๊ฐœ๋ฐœ์ž๋„๊ตฌ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด

 

two ๋ผ๋Š” ๋ณ€์ˆ˜์— one ๊ฐ์ฒด์— ์žˆ๋Š” numberํ•จ์ˆ˜๋ฅผ ๋„ฃ์—ˆ๋”๋‹ˆ this๊ฐ€ ์ด์ „ ๊ฒฐ๊ณผ์™€๋Š” ๋‹ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ window๋ผ๋Š” ๊ฒƒ์€ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ƒ์—์„œ ๋ชจ๋“  ๊ฐ์ฒด์˜ ์กฐ์ƒ์ด๋ผ๊ณ ๋„ ํ•˜๊ณ  ์ „์—ญ๊ฐ์ฒด(๊ธ€๋กœ๋ฒŒ๊ฐ์ฒด) ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. 

 

์ฆ‰, ํ˜ธ์ถœ์„ window์—์„œ ํ•˜๊ณ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

์ฒซ๋ฒˆ์งธ๋Š” one ์ด๋ผ๋Š” ๊ฐ์ฒด์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ–ˆ๋‹ค๋ฉด, two๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ „์—ญ๊ฐ์ฒด์—์„œ ํ•˜๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— this ๋ผ๋Š” ์ฝ˜์†”์„ ์ฐ๊ฒŒ๋˜๋ฉด ์ „์—ญ๊ฐ์ฒด์ธ window์˜ ๋ชจ๋“  ์ •๋ณด๋“ค์ด ์ฐํžˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ . ์ด๋Ÿฌ๋ฉด ์›๋ž˜ ๊ธฐ๋Œ€ํ–ˆ๋˜ one์—์„œ์˜ num๊ฐ’์ด๋‚˜ number๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

โ˜… ํ˜ธ์ถœํ•œ ๊ฐ์ฒด === This

this๋ฅผ window๋กœ ๊ฐ€์ ธ๋ฒ„๋ฆฌ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ป ๋งŒ๋“ค์—ˆ๋˜ ๊ฐ์ฒด์ •๋ณด๋ฅผ ์ด์šฉํ•  ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ES5์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด bind๋ผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋„๊ตฌ ์ฝ˜์†”์„ ํ™•์ธํ•ด๋ณด๋ฉด

bind๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ this๋ฅผ ๋ฌด์กฐ๊ฑด one์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค ๋ผ๊ณ  ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„์˜ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ window๊ฐ€ ์•„๋‹Œ ์ฒ˜์Œ์— ์˜๋„ํ–ˆ๋˜๋Œ€๋กœ one์˜ ๊ฐ์ฒด ๊ฐ’๋“ค์„ this๋กœ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

this์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์ข€ ๊ธธ์–ด์ง€๊ธด ํ–ˆ๋Š”๋ฐ ๊ทธ๋Ÿผ ๋„๋Œ€์ฒด ํ™”์‚ดํ‘œํ•จ์ˆ˜์—์„œ this๊ฐ€ ์–ด์จ‹๋‹ค๋Š”๊ฑด์ง€๋ฅผ ์‚ดํŽด๋ด์•ผ๊ฒ ์ฃ ?

 

MDN์—์„œ ์ด๋Ÿฐ ๋‚ด์šฉ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 ECMAScript 2015๋Š” ์Šค์Šค๋กœ์˜ this ๋ฐ”์ธ๋”ฉ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฒˆ์—” htmlํผ์— ๋ฒ„ํŠผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ํ™•์ธ์„ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

arrow.html

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
 
<head>
    <title>Something</title>
    <meta charset="utf-8" />
</head>
<body>
    <button id='btn' type='button'> ๋ฒ„ํŠผ
    <script src='arrow.js'></script>
</body>
 
</html>
cs

 

 

 

 

arrow.js

1
2
3
4
5
6
7
8
9
10
11
12
13
const btn = document.getElementById('btn')
 
var obj = {
    count : 0,
    setCounter : function() {
        console.log(this.count);
        btn.addEventListener('click',function(){
            console.log(this)
        })
    }
};
 
obj.setCounter();
cs

 

๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ this ์˜ ์ •๋ณด๋ฅผ ์ฝ˜์†”๋กœ ์ฐ๋Š” ๊ฒƒ์ธ๋ฐ ์ฝ˜์†”๋กœ ์ฐํžˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด๋ณด๋ฉด

obj ์˜ ๊ฐ์ฒด์ •๋ณด๊ฐ€ ์ฐํžˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ button์˜ ์ •๋ณด๊ฐ€ this๋กœ ์ฐํžˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. this ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๊ฐ€ button์ด๊ธฐ ๋•Œ๋ฌธ์— this๋Š” button์˜ ์ •๋ณด๊ฐ€ ์ฐํž ์ˆ˜ ๋ฐ–์— ์—†์ฃ . obj์˜ ๊ฐ์ฒด์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์กด์˜ bind ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ์„ ๋•Œ์—๋Š”

 

arrow.js

1
2
3
4
5
6
7
8
9
10
11
12
13
const btn = document.getElementById('btn')
 
var obj = {
    count : 0,
    setCounter : (function() {
        console.log(this.count);
        btn.addEventListener('click',function(){
            console.log(this)
        }).bind(this));
    }
};
 
obj.setCounter();
cs

 

setCounter์˜ function ๋ถ€๋ถ„์„ bind ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ•์ œ์ ์œผ๋กœ obj๋ฅผ this ๋กœ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด์ •๋ณด๋ฅผ this๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์ฃ 

 

 

 

โ˜… ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—๋Š” this ๊ฐ€ ์—†๋‹ค!

 

const btn = document.getElementById('btn')

var obj = {
count : 0,
setCounter : function() {
console.log(this.count);
btn.addEventListener('click', function() {
console.log(this)
}.bind(this))
}
};

obj.setCounter();

 

ํ™”์‚ดํ‘œํ•จ์ˆ˜๋Š” this๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋‚ด์—์„œ this๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ this๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์ฐพ์œผ๋Ÿฌ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

์ฆ‰ setCounter์ด๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ์˜ this๊ฐ€ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋‚ด์—์„œ์˜ this๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด์ฃ . ๊ทธ๋ž˜์„œ button ๋‚ด์—์„œ bind ์—†์ด this๋ฅผ ์‚ฌ์šฉํ•ด๋„ button์˜ ์ •๋ณด๊ฐ€ ์•„๋‹Œ obj ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ฒ˜์Œ์—” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—๋Š” this ๊ฐ€ ์—†๋‹ค๊ณ  ํ•˜๊ธธ๋ž˜ ์—†๋Š”๋ฐ ์“ฐ๋ฉด ์˜ค๋ฅ˜๋‚˜์•ผํ•˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€ ํ•˜๋Š” 1์ฐจ์›์ ์ธ ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋Š”๋ฐ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” this ์ •๋ณด๊ฐ€ ์—†์œผ๋‹ˆ ์—†๋‹ค๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค ์ƒ๊ฐ์ด ๋“œ๋„ค์š” ใ…‹ใ…‹

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ