Skip to content

Latest commit

ย 

History

History
437 lines (354 loc) ยท 12.9 KB

ch25-ํ•ด์„ค.md

File metadata and controls

437 lines (354 loc) ยท 12.9 KB

Chapter25 ํด๋ž˜์Šค

๐Ÿ“Œ๋ฌธ์ œ1

ํด๋ž˜์Šค ๋˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ ์ •์  ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

1. ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์ด ์†ํ•ด ์žˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์ด ๋‹ค๋ฅด๋‹ค.
(ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ์ด๊ณ , ์ •์  ๋ฉ”์„œ๋“œ๋Š” ํฌ๋ž˜์Šค ๋˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๋ฉ”์„œ๋“œ์ด๋‹ค.)
2. ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ , ์ •์  ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค ๋˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
3. ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.
  • p430~432

๐Ÿ“Œ๋ฌธ์ œ2

์•„๋ž˜ ๋‘ ์ฝ”๋“œ์˜ ์ฐจ์ด์ ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

// ์ฝ”๋“œ1
class Person {
  name = 'Kim';
}

// ์ฝ”๋“œ2
class Person {
  constructor() {
    this.name = 'Kim';
  }
}

์ •๋‹ต ๋ฐ ํ•ด์„ค

์ฐจ์ด์ ์€ ์—†์Šต๋‹ˆ๋‹ค.
์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์™ธ๋ถ€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ฝ”๋“œ1์˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ ,
์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์™ธ๋ถ€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด ์ฝ”๋“œ2์˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • p443~445

๐Ÿ“Œ๋ฌธ์ œ3

๋‹ค์Œ ๋ณด๊ธฐ์˜ True, False๋ฅผ ํŒ๋‹จํ•˜์‹œ์˜ค.

(1) : ํด๋ž˜์Šค, ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋ชจ๋‘ ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ •๋œ๋‹ค.
(2) : ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ํŒŒ์Šค์นผ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
(3) : ํด๋ž˜์Šค๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๋ฏ€๋กœ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
(4) : ํด๋ž˜์Šค์˜ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” static ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
(5) : ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํด๋ž˜์Šค๋Š” ์†Œ์Šค์ฝ”๋“œ ํ‰๊ฐ€ ๊ณผ์ •(๋Ÿฐํƒ€์ž„ ์ด์ „)์— ๋จผ์ € ํ‰๊ฐ€๋œ๋‹ค.
(6) : ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ์€ let, const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ํ˜ธ์ด์ŠคํŒ… ์•ˆ๋˜์–ด ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€์— ๋น ์งˆ ์œ„ํ—˜์ด ์žˆ๋‹ค.
(7) : ํด๋ž˜์Šค์˜ constructor ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this๋Š” ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
(8) : ํด๋ž˜์Šค์˜ constructor ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜๊ฐ’์„ ์ž‘์„ฑํ•˜๋ฉด ์•”๋ฌต์ ์ธ this ๋ฐ˜ํ™˜์ด ๋ฌด์‹œ๋œ๋‹ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) : False (p418)
ํด๋ž˜์Šค ๋‚ด์˜ ๋ชจ๋“  ์ฝ”๋“œ์—๋Š” ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ •๋˜์–ด ์‹คํ–‰๋˜๋ฉฐ strict mode๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์—†๋‹ค.
ํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š๋Š”๋‹ค.

(2) : True (p419)

(3) : True (p419)

(4) : False (p420)
ํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ static ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

(5) : True (p421)

(6) : False (p422)
ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ์€ let, const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€์— ๋น ์งˆ ์œ„ํ—˜์ด ์žˆ๋‹ค.

(7) : True (p425)

(8) : False (p428)
๋ช…์‹œ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์•”๋ฌต์ ์ธ this ๋ฐ˜ํ™˜์ด ๋ฌด์‹œ๋œ๋‹ค.
ํ•˜์ง€๋งŒ ์›์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์›์‹œ๊ฐ’ ๋ฐ˜ํ™˜์ด ๋ฌด์‹œ๋˜๊ณ  ์•”๋ฌต์ ์œผ๋กœ this๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ 4

๋‹ค์Œ์„ ๋ณด๊ณ  true or false๋ฅผ ๊ณ ๋ฅด์‹œ์˜ค

1. ES6์—์„œ ๋„์ž…๋œ class๋Š” ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ์„ ์ง€์›ํ•œ๋‹ค.
2. class๋Š” ํ•จ์ˆ˜์™€ ๊ฐ™์ด 1๊ธ‰ ๊ฐ์ฒด์ด๋‹ค. 
3. typeof Person === `function`
4. ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํด๋ž˜์Šค๋Š” ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , 
๊ทธ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค ์ •์˜ ์ด์ „์— ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ •๋‹ต ๋ฐ ํ•ด์„ค

1. false - ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋ชจ๋ธ์ด๋‹ค
2. true - 1๊ธ‰ ๊ฐ์ฒด๋กœ ํ‰๊ฐ€๋œ๋‹ค
3. true - class๋Š” ํ•จ์ˆ˜๋กœ ์ทจ๊ธ‰๋œ๋‹ค. 
4. false - ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ const, let ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. 

๐Ÿ“Œ๋ฌธ์ œ 5

๋‹ค์Œ ํด๋ž˜์Šค์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ •์˜ ๋ฐฉ์‹์„ ์ง์ง€์–ด ์ฃผ์„ธ์š”.

var Person = (function () {
	function Person (name) { // A
		this.name = name;
	}

	Person.prototype.sayHello = function () { // B
		console.log(`Hello`);
	}

	Person.sayHello = function (){ // C
		console.log('Hello');
	}
	
	return Person;
})();
class Person {
	constructor(name) { // 1
		this.name = name;
	}

	static sayHello(){ // 2
		console.log("Hello!");
	}

	sayHello(){ // 3
		console.log(`Hello`)
	}
}

์ •๋‹ต ๋ฐ ํ•ด์„ค

A - 1 / B - 3 / C - 2

๐Ÿ“Œ๋ฌธ์ œ 6

๋‹ค์Œ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ๋ชจ๋‘ ๊ณ ๋ฅด์‹œ์˜ค.

// 1
class Person1{}

// 2
class Person2{
	constructor(){}
	constructor(){}
}

// 3
class Person3{
	constructor(name){
		this.name = name;
	}
	static print(){
		console.log(name)
	}
}

// 4
class Person4{
	constructor(name){
		this.name = name;
		return name;
	}
}

์ •๋‹ต ๋ฐ ํ•ด์„ค

2
1 - ์•”๋ฌต์ ์œผ๋กœ ๋นˆ constructor ๊ฐ€ ์ •์˜๋œ๋‹ค

2 - constructor๋Š” 1๊ฐœ์—ฌ์•ผ๋งŒ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

3- ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค. 

4 - ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉด ์•”๋ฌต์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. return ๋ฌธ์€ constructor ๋‚ด๋ถ€์—์„œ ์“ฐ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ7

๋‹ค์Œ ๋ฌธ์žฅ์˜ true or false๋ฅผ ํŒ๋‹จํ•˜์„ธ์š”.

(1) ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
(2) ํด๋ž˜์Šค๋Š” ์ƒ์†์„ ์ง€์›ํ•˜๋Š” extends์™€ super ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
(3) ํด๋ž˜์Šค ๋‚ด์˜ ๋ชจ๋“  ์ฝ”๋“œ์—๋Š” ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ •๋˜์–ด ์‹คํ–‰๋œ๋‹ค.
(4) ํด๋ž˜์Šค๋Š” ์ผ๊ธ‰๊ฐ์ฒด์ด๋‹ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

418p
(1) false
ํด๋ž˜์Šค๋ฅผ new์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ new์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋œ๋‹ค.

(2) false

ํด๋ž˜์Šค๋Š” ์ƒ์†์„ ์ง€์›ํ•˜๋Š” extends์™€ super ํ‚ค์›Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” extends์™€ super ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

(3) true

ํด๋ž˜์Šค ๋‚ด์˜ ๋ชจ๋“  ์ฝ”๋“œ์—๋Š” ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ •๋˜์–ด ์‹คํ–‰๋˜๋ฉฐ, strict mode๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์—†๋‹ค.
ํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š๋Š”๋‹ค.

(4) true
419p
ํด๋ž˜์Šค๋Š” ํ•จ์ˆ˜๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๋Š” ๊ฐ’์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ8

๋‹ค์Œ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

(1)

console.log(Person);

class Person {}

(2)

class Person {}

const me = Person();

console.log(me);

(3)

const Person = class MyClass{};

const me = new Person();

console.log(MyClass);

const you = new MyClass();

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) 421p
ReferenceError: Cannot access 'Person' before initialization
ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ์ •์˜ ์ด์ „์— ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

(2) 422p
TypeError: Class constructor Person cannot be invoked without 'new'
ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ์กด์žฌ ์ด์œ ์ด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

(3) 423p
ReferenceError: MyClass is not defined
๊ธฐ๋ช… ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค ์ด๋ฆ„์€ ์™ธ๋ถ€ ์ฝ”๋“œ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ9

ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ์˜ ํŠน์ง•์„ ์•„๋Š”๋Œ€๋กœ ์ž‘์„ฑํ•˜์„ธ์š”.

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) function ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ๋ฉ”์„œ๋“œ ์ถ•์•ฝ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•œ๋‹ค.
(2) ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ๋Š” ์ฝค๋งˆ๊ฐ€ ํ•„์š” ์—†๋‹ค.
(3) ์•”๋ฌต์ ์œผ๋กœ strict mode๋กœ ์‹คํ–‰๋œ๋‹ค.
(4) for ... in ๋ฌธ์ด๋‚˜ Object.keys ๋ฉ”์„œ๋“œ ๋“ฑ์œผ๋กœ ์—ด๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค.
์ฆ‰, ํ”„๋กœํผํ‹ฐ์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ [[Enumerable]]์˜ ๊ฐ’์ด false๋‹ค.
(5) ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ [[Construct]]๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” non-constructor๋‹ค. ๋”ฐ๋ผ์„œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ10

๋‹ค์Œ ๋ณด๊ธฐ์˜ True, False๋ฅผ ํŒ๋ณ„ํ•˜์‹œ์˜ค.

1. ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ๋Š” constructor๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
2. ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.
3. ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ, ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด super ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

1. False p454
์ˆ˜ํผํด๋ž˜์Šค, ์„œ๋ธŒํด๋ž˜์Šค ๋ชจ๋‘ constructor๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
์„œ๋ธŒํด๋ž˜์Šค์—์„œ constructor๋ฅผ ์ƒ๋žตํ•ด๋„ ์•”๋ฌต์ ์œผ๋กœ super ํ‚ค์›Œ๋“œ ํ˜ธ์ถœ๊นŒ์ง€ ์ง„ํ–‰๋œ๋‹ค.

2. False p453
(์ด ๋ฐ˜๋Œ€๋กœ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ƒ์†๋ฐ›๋Š” ๋ฐฉ๋ฒ•์€ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค..)

3. False p457
์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ this ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋„ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ ๊ฒฝ์šฐ this๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋กœ ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธด๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ11

์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์„œ๋ธŒ ํด๋ž˜์Šค์˜ constructor ์ž‘์„ฑ์‹œ super๋ฅผ ๊ฐ€์žฅ ์ƒ๋‹จ์˜ ์ ์–ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

class ColorRectangle extends Rectangle {
  constructor(width, height, color) {
    super(width, height);
    this.color = color;
  }
}

์ •๋‹ต ๋ฐ ํ•ด์„ค

์„œ๋ธŒ ํด๋ž˜์Šค๋Š” super์— ์˜ํ•ด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ์ˆ˜ํผ ํด๋ž˜์Šค์—๊ฒŒ ์œ„์ž„ํ•œ๋‹ค.
์„œ๋ธŒ ํด๋ž˜์Šค๋Š” super์— ์˜ํ•ด ๋ฐ˜ํ™˜๋œ ์ธ์Šคํ„ด์Šค๋ฅผ this์— ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
๋”ฐ๋ผ์„œ super๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  this๋„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • p463~465

๐Ÿ“Œ๋ฌธ์ œ12

๋‹ค์Œ ์ฝ”๋“œ์—์„œ (1)๊ณผ (2)์˜ ์ถœ๋ ฅ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ์ด์œ ๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

class FirstClass {
  constructor () {
    this.age = 10;
  }

  print() {
    console.log('firstClass', this.age);
  }
}
class SecondClass extends FirstClass {
  constructor () {
    super();
    this.age = 20;
  }
  print() {
    console.log('secondClass', this.age);
  }
}
const first = new FirstClass();
const second = new SecondClass();

second.print(); // (1) secondClass 20
second.__proto__.print(); // (2) secondClass undefined

์ •๋‹ต ๋ฐ ํ•ด์„ค

ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋‚ด this๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(1)์—์„œ print๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๋Š” second ์ธ์Šคํ„ด์Šค์ด๋‹ค.
๋”ฐ๋ผ์„œ this๋Š” second๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ second ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€์ง„ age๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

(2)์—์„œ print๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๋Š” second ์ธ์Šคํ„ด์Šค์˜ [[Prototype]]์ด๋‹ค.
์ด๋Š” second.__proto__ ๋˜๋Š” SecondClass.prototype ์™€ ๋™์ผํ•˜๋‹ค.
๊ทธ๋ฆฌ๊ณ  SecondClass์˜ constructor ๋‚ด this.age๋Š” SecondClass๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” this์ด๋‹ค.
SecondClass๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” this๊ฐ€ ์•„๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋ฉ”์„œ๋“œ๋งŒ ์žˆ๋Š” ์žˆ๋Š” ํด๋ž˜์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์—๋Š” age ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†์–ด์„œ undefined๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.
  • p461~462

๐Ÿ“Œ๋ฌธ์ œ13

๋‹ค์Œ ๋ฌธ์žฅ์˜ true or false๋ฅผ ํŒ๋‹จํ•˜์„ธ์š”.

(1) ์ˆ˜ํผํด๋ž˜์Šค์˜ ํ•จ์ˆ˜์—์„œ super๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
(2) ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor ๋‚ด๋ถ€์˜ this๋Š” ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
(3) ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ this๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

๋‹ต์•ˆ ์ž‘์„ฑ

(1) true
457p
super๋Š” ๋ฐ˜๋“œ์‹œ ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ๋งŒ ํ˜ธ์ถœํ•œ๋‹ค.
์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์˜ constructor๋‚˜ ํ•จ์ˆ˜์—์„œ super๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

(2) true
463p
์ˆ˜ํผํด๋ž˜์Šค์˜ constructor ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „์— ์•”๋ฌต์ ์œผ๋กœ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๋นˆ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋Š” this์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.
๋”ฐ๋ผ์„œ ์ˆ˜ํผํด๋ž˜์Šค์˜ constructor ๋‚ด๋ถ€์˜ this๋Š” ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

(3) true
465p
์„œ๋ธŒํด๋ž˜์Šค๋Š” ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  super๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ this์— ๋ฐ”์ธ๋”ฉํ•˜์—ฌ
๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— super๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉฐ this ๋ฐ”์ธ๋”ฉ๋„ ๋ถˆ๊ฐ€ํ•˜๋‹ค.
๋”ฐ๋ผ์„œ ์„œ๋ธŒํด๋ž˜์Šค์˜ constructor์—์„œ super๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์—๋Š” this๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ14

๋‹ค์Œ ๋นˆ์นธ์— ๋“ค์–ด๊ฐˆ ๋‹จ์–ด๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

(1) extends ํ‚ค์›Œ๋“œ ์•ž์—๋Š” ๋ฐ˜๋“œ์‹œ ***์ด(๊ฐ€) ์™€์•ผ ํ•œ๋‹ค.
(2) ์ˆ˜ํผํด๋ž˜์Šค์™€ ์„œ๋ธŒํด๋ž˜์Šค ๋ชจ๋‘ constructor๋ฅผ ์ƒ๋žตํ•˜๋ฉด ***์ด(๊ฐ€) ์ƒ์„ฑ๋œ๋‹ค.
(3) super๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ˆ˜ํผํด๋ž˜์Šค์˜ ***ํ˜ธ์ถœํ•˜๊ณ ,
super๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ˆ˜ํผํด๋ž˜์Šค์˜ ***๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ต์•ˆ ์ž‘์„ฑ

(1) 453p ํด๋ž˜์Šค
(2) 455p ๋นˆ ๊ฐ์ฒด
(3) 455p constructor, ๋ฉ”์„œ๋“œ

๐Ÿ“Œ๋ฌธ์ œ15

์ƒ์† ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๊ณผ์ •์„ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์„ฑํ•˜์„ธ์š”.

(1) ์„œ๋ธŒํด๋ž˜์Šค์˜ super ํ˜ธ์ถœ
(2) ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜
(3) ์ˆ˜ํผํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”
(4) ์ˆ˜ํผํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ this ๋ฐ”์ธ๋”ฉ
(5) ์„œ๋ธŒํด๋ž˜์Šค constructor๋กœ์˜ ๋ณต๊ท€์™€ this ๋ฐ”์ธ๋”ฉ
(6) ์„œ๋ธŒํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”

๋‹ต์•ˆ ์ž‘์„ฑ

460~466p
(1) - (4) - (3) - (5) - (6) - (2)