Jieunny์˜ ๋ธ”๋กœ๊ทธ

S2) Unit 2. [JS] ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค ๋ณธ๋ฌธ

CodeStates/learning contents

S2) Unit 2. [JS] ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค

Jieunny 2023. 1. 13. 12:21

๐Ÿ“ฃ ํด๋กœ์ € ๋ชจ๋“ˆ ํŒจํ„ด

๋”๋ณด๊ธฐ

โœ”๏ธ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ : ๊ฐ์ฒด.๋ฉ”์„œ๋“œ()

โœ”๏ธ ํด๋กœ์ €๋ฅผ ์ด์šฉํ•ด ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ

function makeCounter() {
  let value = 0;
  return {
    increase: function() {
      value++;
    },
    decrease: function() {
      value--;
    },
    getValue: function() {
      return value;
    }
  }
}

let counter1 = makeCounter()
counter1.increase()
counter1.getValue() // 1

let counter2 = makeCounter()
counter2.decrease()
counter2.decrease()
counter2.getValue() // -2

โžฐ ํด๋กœ์ €๋กœ counter ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ, ๋งค๋ฒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ํ•„์š” ์—†์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ฃ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

โœ”๏ธ ํ•˜๋‚˜์˜ ๋ชจ๋ธ์ด ๋˜๋Š” ์ฒญ์‚ฌ์ง„์„ ๋งŒ๋“ค๊ณ (class), ์ฒญ์‚ฌ์ง„์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š”(instance) ํ”„๋กœ๊ทธ๋ž˜๋ฐ
โœ”๏ธ ๋ณ€์ˆ˜ ํƒ€์ž… '๊ฐ์ฒด'์™€ ์—ฌ๊ธฐ์„œ ๋ฐฐ์šฐ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ '์ธ์Šคํ„ด์Šค ๊ฐ์ฒด'(์ธ์Šคํ„ด์Šค) ๋ฅผ ์ž˜ ๊ตฌ๋ถ„ํ•˜์ž.

๐Ÿ“ฃ ์ธ์Šคํ„ด์Šค

โœ”๏ธ new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

let avante = new Car('hyundai', 'avante', 'black');
let mini = new Car('bmw', 'mini', 'white');

โžฐ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์ฆ‰์‹œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ, ๋ณ€์ˆ˜์— ํด๋ž˜์Šค์˜ ์„ค๊ณ„๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
โžฐ ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋Š” ํด๋ž˜์Šค์˜ ๊ณ ์œ ํ•œ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

โœ”๏ธ ๋ฐฐ์—ด์€ ์ „๋ถ€ Array์˜ ์ธ์Šคํ„ด์Šค

let arr = new Array('jieun', 'happy', 'today');
arr.length; // 3
arr.push('tomorrow');

โžฐ ๋ฐฐ์—ด์€ ์ธ์Šคํ„ด์Šค ์ด๋ฏ€๋กœ ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
โžฐ push, filter ๋“ฑ์˜ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ ํด๋ž˜์Šค์˜ ์›ํ˜• ๊ฐ์ฒด(prototype)์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

๐Ÿ“ฃ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ

โœ”๏ธ ํด๋ž˜์Šค์— ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

1๏ธโƒฃ ์†์„ฑ
โžฐ ์ž๋™์ฐจ์˜ ๋ธŒ๋žœ๋“œ, ์ฐจ ์ด๋ฆ„, ์ƒ‰์ƒ ๋“ฑ
โžฐ brand, name, color...

2๏ธโƒฃ ๋ฉ”์„œ๋“œ
โžฐ '๊ฐ์ฒด์— ๋”ธ๋ฆฐ ํ•จ์ˆ˜' : ์†๋ ฅ์„ค์ •, ์šด์ „ ๋“ฑ
โžฐ setSpeed(), drive()...

๐Ÿ“ฃ ํด๋ž˜์Šค

โœ”๏ธ ES5 ) ํ•จ์ˆ˜๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

function Car(brand, name, color) {
}


โœ”๏ธ ES6 ) class๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

class Car {
	constructor(brand, name, color) {
    }
}

โžฐ constructor : ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ, ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์ด๋ฉฐ return ๊ฐ’์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

โœ”๏ธ ์†์„ฑ์˜ ์ •์˜

//ES5
function Car(brand, name, color) {
    this.brand = brand;
    this.name = name;
    this.color = color;
}

//ES6
class Car {
	constructor(brand, name, color) {
    	this.brand = brand;
        this.name = name;
        this.color = color;
  	}
}

โžฐ this : ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
โžฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ์ง€์ •ํ•˜๋Š” ๊ฐ’์ด๋ฉฐ,
this์— ํ• ๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค์— ํ•ด๋‹น ์†์„ฑ์„ ๋ถ€์—ฌํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

โœ”๏ธ ๋ฉ”์„œ๋“œ์˜ ์ •์˜

//ES5
function Car(brand, name, color) {
}
Car.prototype.setSpeed = function() {
}
Car.prototype.drive = function() {
}

//ES6
class Car {
	constructor(brand, name, color) {
    }
    setSpeed() {
    }
    drive() {
    }
}

โžฐ ES5๋Š” prototype์„ ์‚ฌ์šฉํ•ด์„œ ์ •์˜ํ•˜๊ณ , ES6์€ class ์•ˆ์ชฝ์— ๋ฌถ์–ด์„œ ์ •์˜ํ•œ๋‹ค.

โœ”๏ธ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

let avante = new Car('hyundai', 'avante', 'black');
avante.color;	// 'black'
avante.drive();	// ์•„๋ฐ˜๋–ผ๊ฐ€ ์šด์ „์„ ์‹œ์ž‘ํ•œ๋‹ค.


โž• ์šฉ์–ด ์ •๋ฆฌ

๋”๋ณด๊ธฐ

โœ”๏ธ prototype : ๋ชจ๋ธ์˜ ์ฒญ์‚ฌ์ง„์„ ๋งŒ๋“ค ๋•Œ ์“ฐ๋Š” ์›ํ˜• ๊ฐ์ฒด

โœ”๏ธ constructor : ์ธ์Šคํ„ด์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์‹คํ–‰ํ•˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜

โœ”๏ธ this : ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ํ•ด๋‹น scope ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๊ณ ์œ ํ•œ ์‹คํ–‰ context

new ํ‚ค์›Œ๋“œ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”๋กœ this์˜ ๊ฐ’