본문으둜 κ±΄λ„ˆλ›°κΈ°

200309

Β· μ•½ 4λΆ„

μΈμ‚¬μ΄λ“œ μžλ°”μŠ€ν¬λ¦½νŠΈ#

μ˜€λŠ˜μ€ μΈμ‚¬μ΄λ“œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 6μž₯ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ κ³΅λΆ€ν•˜μ˜€λ‹€.

6.1 클래슀, μƒμ„±μž, λ©”μ†Œλ“œκΉŒμ§€λŠ” κ·ΈλŸ­μ €λŸ­ 이해가 λ˜μ—ˆμœΌλ‚˜, 6.2 상속 λΆ€λΆ„μ—μ„œ 정말 μ˜€ν›„, 저녁 μ‹œκ°„ λ‚΄λ‚΄ μ©”μ©” λ§€λ©΄μ„œ μ½μ—ˆμ§€λ§Œ λ„μ €νžˆ 이해가 λ˜μ§€ μ•Šμ•˜λ‹€.

λ‚΄κ°€ Javaλ‚˜ Python을 κΉŠμˆ™νžˆ μ‚¬μš©ν•΄λ³Έ 것도 μ•„λ‹Œλ°, 클래슀 기반의 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— μžμ—°μŠ€λŸ½κ²Œ λ¬Όλ“€μ–΄ μžˆμ—ˆλ‹€. Javaμ—μ„œ μ‚¬μš©ν•˜λ˜ 클래슀 기반의 상속이 λ§€λ„λŸ½κ³ μžμ—°μŠ€λŸ½κ³  μ§κ΄€μ μ΄λΌλŠ” 생각이 λ“€μ—ˆκ³ , λ°˜λ©΄μ— μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν”„λ‘œν† νƒ€μž…μ„ μ΄μš©ν•œμƒμ† 방식은 μ½”λ“œκ°€ μ•„λ‹ˆλΌ 친절히 μ„€λͺ…ν•˜λŠ” 그림을 봐도 λ„ˆλ¬΄ λ³΅μž‘ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ–΄λ €μ› λ‹€. λ­”κ°€ μ»€λ‹€λž€ μž₯벽을 λ§Œλ‚œ κΈ°λΆ„μ΄μ—ˆλ‹€. (λ‚˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν•˜λ©΄ μ•ˆλ˜λŠ” 건가..) μžμ‹ κ°μ΄ 떨어지고 μ–΄λ”˜κ°€ 물어보고 싢은 μ‚¬λžŒμ΄ μ ˆμ‹€ν–ˆλ‹€..

일단 μ΄ν•΄λ˜μ§€ μ•ŠλŠ” 점을 정리해본닀.


μΈμ‚¬μ΄λ“œ μžλ°”μŠ€ν¬λ¦½νŠΈ 책에 λ”°λ₯΄λ©΄ ECMAScript 5μ—μ„œ μ œκ³΅ν•˜λŠ” Object.create() ν•¨μˆ˜μ˜ λ‚΄λΆ€ κ΅¬ν˜„μ€ μ΄λŸ¬ν•˜λ‹€κ³  ν•œλ‹€.

function create_object(o) {    function F() {}    F.prototype = o;    return new F();}

이 ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ 상속을 κ΅¬ν˜„ν•΄λ³΄μž.

var Person = {    name: 'zzoon',    getName: function () {        return this.name;    },    setName: function (arg) {        this.name = arg;    },};
function create_object(o) {    function F() {}    F.prototype = o;    return new F();}
var student = create_object(person);
student.setName('me');console.log(student.getName()); // me

2020-03-09-200309-image-0


이 κ·Έλ¦ΌκΉŒμ§€λŠ” 이해가 λ˜μ—ˆλ‹€.


var Parent = (function () {    function Parent(name) {        this.name = name;    }
    Parent.prototype.sayHi = function () {        console.log('Hi! ' + this.name);    };
    return Parent;})();
var child = Object.create(Parent.prototype);child.name = 'child';
child.sayHi(); // Hi! child
console.log(child instanceof Parent); // true

예제 좜처 : πŸ”— μžλ°”μŠ€ν¬λ¦½νŠΈ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° - Poiemaweb


의문점 : μœ„ μ˜ˆμ œλŠ” λΆ€λͺ¨κ°€ λ˜λŠ” Person 객체λ₯Ό 직접 넣은 반면, 이 μ˜ˆμ œμ—μ„œλŠ” Parent.prototype 을 Object.create 의 인수둜 λ„£μ—ˆλŠ”κ°€?


2020-03-09-200309-image-1


μ•—.. μ•„λž˜λŠ” λΆ€λͺ¨λ‘œ 삼을 μƒμ„±μž ν•¨μˆ˜κ°€ μžˆλŠ” κ²½μš°μ—, μœ„λŠ” λΆ€λͺ¨λ‘œ 삼을 객체가 μžˆλŠ”κ²½μš°μ— μ‚¬μš©ν•  수 μžˆλŠ” νŒ¨ν„΄μΈ κ²ƒμ΄μ—ˆλ‹€..!


이해 μ•ˆλ˜λŠ” 점듀

  • extend() ν•¨μˆ˜

  • apply() ν•¨μˆ˜ (λŒ€λž΅μ€ 이해됨 ..;;)

  • 클래슀 기반의 상속인 경우 μ™œ μžμ‹ 클래슀의 prototype 이 λΆ€λͺ¨ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜λŠ”λ°, 이 ꡬ쑰가 μ™œ μžμ‹ 클래슀의 prototype 에 λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•  λ•Œλ¬Έμ œκ°€ λ˜λŠ”κ°€?


2020-03-09-200309-image-2


일단 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° 뢀뢄을 내일 ν•œλ²ˆ 더 곡뢀해 봐야겠닀. 그리고 νŒ¨ν„΄μ΄ λ‹€μ–‘ν•˜λ‹€λ³΄λ‹ˆ μ–΄λŠ νŒ¨ν„΄μ΄ μ’‹λ‹€λŠ” 건지 이해가 μ•ˆλ˜κ² λŠ” 상황이 μ’…μ’… μžˆλ‹€. 아직 1νšŒλ…λ„μ•ˆν•΄λ΄€κΈ° λ•Œλ¬Έμ—, 아직 λ‹€ μ΄ν•΄ν•˜λ €λŠ”κ²Œ 무리인거 같기도 ν•˜λ‹€.