๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ this: ๊ฐœ๋…, ํ™œ์šฉ, ์žฅ๋‹จ์ , ์˜ˆ์ œ ์ฝ”๋“œ

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 2. 27.
728x90

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ this: ๊ฐœ๋…, ํ™œ์šฉ, ์žฅ๋‹จ์ , ์˜ˆ์ œ ์ฝ”๋“œ

this๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ this๋Š” ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. this๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ, ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์—ญํ• 

this์˜ ์ฃผ๋œ ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ์ฒด์˜ ์†์„ฑ ์ฐธ์กฐ: ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. ์ƒ์„ฑ์ž ํ•จ์ˆ˜: ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
  3. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ: ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์ƒํ™ฉ

1. ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ์—์„œ

const obj = {
  name: 'MyObject',
  logName: function() {
    console.log(this.name);
  }
};

obj.logName(); // ์ถœ๋ ฅ: MyObject

2. ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ

function Person(name) {
  this.name = name;
}

const person1 = new Person('Alice');
console.log(person1.name); // ์ถœ๋ ฅ: Alice

3. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ

const button = document.getElementById('myButton');

button.addEventListener('click', function() {
  console.log(this); // ์ถœ๋ ฅ: <button id="myButton">Click me</button>
});

์žฅ๋‹จ์ 

์žฅ์ 

  • ์œ ์—ฐํ•œ ํ™œ์šฉ: ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ๋™์ ์œผ๋กœ ์ปจํ…์ŠคํŠธ์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์œ ์—ฐํ•˜๊ฒŒ ํ™œ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ฑ: ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

๋‹จ์ 

  • ํ˜ผ๋™์˜ ์—ฌ์ง€: ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ๊ฒฝ์šฐ, this๊ฐ€ ์–ด๋–ค ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š”์ง€ ํ˜ผ๋™์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Arrow Function๊ณผ ์ฐจ์ด: Arrow Function์€ ์ž์ฒด์ ์ธ this๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ ์‹œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ์ฝ”๋“œ

1. ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ์—์„œ์˜ this ํ™œ์šฉ

const calculator = {
  value: 0,
  add: function(num) {
    this.value += num;
  }
};

calculator.add(5);
console.log(calculator.value); // ์ถœ๋ ฅ: 5

2. ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ์˜ this ํ™œ์šฉ

function Car(model) {
  this.model = model;
}

const myCar = new Car('Tesla');
console.log(myCar.model); // ์ถœ๋ ฅ: Tesla

3. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ์˜ this ํ™œ์šฉ

const button = document.getElementById('myButton');

button.addEventListener('click', function() {
  this.disabled = true;
  console.log('Button clicked!');
});

์—ฐ๊ด€๋œ ๊ธฐ์ˆ 

Arrow Function

Arrow Function์€ ์ž์ฒด์ ์ธ this๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ณ , ์ฃผ๋ณ€ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ•จ์ˆ˜๊ฐ€ ์–ด๋””์—์„œ ์ •์˜๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ this๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Arrow Function์€ ๋ฉ”์†Œ๋“œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ๋  ๋•Œ ๋” ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

const myFunction = () => {
  console.log(this); // ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ์ฐธ์กฐ
};

this์˜ ์ดํ•ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์ ์ ˆํ•œ ํ™œ์šฉ์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€