์ฑ ๋ฆฌ๋ทฐ/๋ฆฌํฉํ ๋ง(์๋ฐ์คํฌ๋ฆฝํธํ)
[๋ฆฌํฉํฐ๋ง 2ํ] 12.11 ์ํผํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ
1. ์ํผํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ์ด์ผ ํ ๋ ๊ธฐ๋ฅ์ ์จ์ ํ ์ฌ์ฉํ ์ ์๊ณ ์ด์ธ๋ฆฌ์ง ์์ ํด๋์ค๋ฅผ ์์ํ์ ๋, ์์์ ๋จผ์ ์ ์ฉํ๋ค๊ฐ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ๊ฐ์ฒด ์งํฅ์์ ์์์ด ํผ๋๊ณผ ๋ณต์ก๋๋ฅผ ํค์ธ ์๋ ์๋ค. ์์์ ์๋ชป ์ ์ฉํ ์๋ก๋ ์๋ฐ์ ์คํ ํด๋์ค๊ฐ ์ ๋ช ํ๋ค. ์๋ฐ์ ์คํ์ ๋ฆฌ์คํธ๋ฅผ ์์ํ๊ณ ์๋๋ฐ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐ์ํ๋ ๋ฆฌ์คํธ์ ๊ธฐ๋ฅ์ ์ฌํ์ฉํ๊ฒ ๋ค๋ ์๊ฐ์ด ์ด๋ํ ๊ฒฐ๊ณผ๋ค. ์ต์ ์ ๋ฆฌ์คํธ(์ํผํด๋์ค)์ ์ฐ์ฐ ์ค ์คํ(์๋ธํด๋์ค)์๋ ์ ์ฉ๋์ง ์๋ ๊ฒ ๋ง์์๋ ๊ทธ ๋ชจ๋ ์ฐ์ฐ์ด ์คํ ์ธํฐํ์ด์ค์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ค๋ ๊ฒ ๋ฆฌ์ค์ฝํ ์นํ ์์น : ์๋ธ ํด๋์ค๋ ์ํผ ํด๋์ค ์๋ฆฌ๋ฅผ ๋์ฒดํ๋๋ผ๋ ์ ๋์ํด์ผ ํ๋ค. ์๋ฐ์ ์คํ์ฒ๋ผ, ์ํผํด๋์ค์ ๊ธฐ๋ฅ๋ค์ด ์๋ธํด๋์ค์ ์ด์ธ๋ฆฌ์ง ์๋๋ค๋ฉด ๊ทธ ๊ธฐ๋ฅ๋ค์ ์์์ ํตํด..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.10 ์๋ธํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ(์์ 2)
์์ ํฌ์ธํธ : ํด๋์ค ๋ด์ ์คํํฑํ ํฉํ ๋ฆฌ ๋ฉ์๋ or ์ต์์ function, ์์-๋ถ๋ชจ ์ฐ๊ฒฐ์ ์ ๊ฑฐ ํ ํ ๊ฐ๊ฐ ์ธ์คํด์ค ์์ฑ 2. ์์2: ์๋ธ ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๋ ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ด ์ฝ๋๋ ๊ณง ์ผ์ ์กฐ๋ฅ์ ์ฌ์ก ์กฐ๋ฅ๋ฅผ ๊ตฌ๋ถ ์ง๊ธฐ ์ํด ํฌ๊ฒ ์์ ํ ์์ ์ด๋ค. (์ด ์ฐจ์ด๋ฅผ WildBird์ CaptiveBird๋ผ๋ ๋ ์๋ธํด๋์ค๋ก ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ๋ ์๋ค) ์์์ ํ๋ฒ๋ง ์ธ ์ ์์ผ๋ ์ผ์๊ณผ ์ฌ์ก์ ๊ธฐ์ค์ผ๋ก ๋๋๋ ค๋ฉด ์ข ์ ๋ฐ๋ฅธ ๋ถ๋ฅ๋ฅผ ํฌ๊ธฐํด์ผ ํ๋ค. function createBird(data) { switch (data.type) { case '์ ๋ฝ ์ ๋น': return new EuropeanSwallow(data); break; case '์ํ๋ฆฌ์นด ์ ๋น': return n..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.10 ์๋ธํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ
์ด๋ฒ ๋ฆฌํฉํฐ๋ง์ ์์๋ ์ด์ ์์๋ค ๋ณด๋ค ํจ์ฌ ๊ธธ๋ค 1. ์์1 : ์๋ธ ํด๋์ค๊ฐ ํ๋์ผ ๋ ๊ณต์ฐ ์์ฝ ํด๋์ค //์์ฝ ํด๋์ค class Booking { constructor(show, date) { this._show = show; this._date = date; } get hasTalkBack() {//ํ๋ฆฌ๋ฏธ์์ผ ๊ฒฝ์ฐ, ์ค๋ฒ๋ผ์ด๋ //์ผ๋ฐ ์์ฝ์ ๊ณต์ฐ ํ ๊ด๊ฐ๊ณผ์ ๋ํ ์๊ฐ์ ์ฑ์๊ธฐ๊ฐ ์๋ ๋๋ง ์ ๊ณตํ๋ค. return this._show.hasOwnProperty('talkback') && !this.isPeakDay; } get basePrice() {//ํ๋ฆฌ๋ฏธ์์ผ ๊ฒฝ์ฐ, ์ค๋ฒ๋ผ์ด๋ let result = this._show.price; if (this.isPeakDay) { result += ..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.10์ ์ฝ๊ธฐ์ ์์ ์์์ด๋?
์ฐธ๊ณ ๊ธ https://umbum.dev/822 Composition VS Extends : delegation, decorator, wrapper Effective Java : ์์ดํ 18. (๊ธฐ๋ฅ ํ์ฅ์ด ํ์ํ ๋)์์๋ณด๋ค๋ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ผ [Effective Java] 4์ฅ ํด๋์ค์ ์ธํฐํ์ด์ค ์์์ด๋? extends๋ฅผ ๋งํจ. (implements๋ ์๋. ์ด๊ฑด ๊ตฌํ.) ์ปดํฌ์ง์ ์ด๋? Compo umbum.dev ๋งํฌ ์์ฝ: ์์์ extends ์ปดํฌ์ง์ ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋ด๋ถ private ๋ณ์๋ก ๋๋ ๊ฒ(ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๊ตฌ์ฑ์์๋ก ์ฐ์ธ๋ค๋ ๋ป) ์์๊ณผ ์ปดํฌ์ง์ ์ ์ฐจ์ด๋ ์ค๋ฒ๋ผ์ด๋ฉํ๋๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ delegateํ๋๋์ ์ฐจ์ด๋ก ๋ณผ ์ ์๋ค. 0. ์์ vs ๋ธ๋ฆฌ๊ฒ์ดํธ ์์(์ปดํฌ์ง์ )..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.7 ์๋ธํด๋์ค ์ ๊ฑฐํ๊ธฐ
1. ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น ๋์ด์ ์ฐ์ด์ง ์๋ ์๋ธํด๋์ค์ ๋ง์ฃผํ๋ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์น ์๋ ๊ฒ์ ์ดํดํ๋๋ผ ์๋์ง๋ฅผ ๋ญ๋นํ ๊ฒ์ด๋ค. ์ด๋ฐ ์ ๋๊น์ง ๋๋ฉด ์๋ธํด๋์ค๋ฅผ ์ํผํด๋์ค์ ํ๋๋ก ๋์ฒดํด ์ ๊ฑฐํ๋ ๊ฒ ์ต์ ์ด๋ค. ๋ถํ์ํ ์๋ธ ํด๋์ค๋ฅผ ์ ๊ฑฐํ๊ณ , ๋์ ์ ์ธ๋ถ์์ ์ ํ ์ ํ์์๋ ๋ด๋ถ๋ก์ง๋ค์ ์ ์บก์ํํด๋๊ณ , ์ธ๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ create๋ผ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ฃผ๊ณ , ๊ธฐํ ํ์ํ ๋ฉ์๋๋ฅผ ์ ์ฑ๊ฒจ์ฃผ๋๋ก ํ์. 2. ์ ์ฐจ (1) ์๋ธํด๋์ค์ ์์ฑ์๋ฅผ ํฉํฐ๋ฆฌ ํจ์๋ก ๋ฐ๊พผ๋ค. -> ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ์ธก์์ ๋ฐ์ดํฐ ํ๋๋ฅผ ์ด์ฉํด ์ด๋ค ์๋ธํด๋์ค๋ฅผ ์์ฑํ ์ง ๊ฒฐ์ ํ๋ค๋ฉด ๊ทธ ๊ฒฐ์ ๋ก์ง์ ์ํผํด๋์ค์ ํฉํฐ๋ฆฌ ๋ฉ์๋์ ๋ฃ๋๋ค. (2) ์๋ธํด๋์ค์ ํ์ ์ ๊ฒ์ฌํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ๊ทธ ๊ฒ์ฌ ์ฝ๋์ ํจ์ ์ถ์ถํ๊ธฐ์ ..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.6 ํ์ ์ฝ๋๋ฅผ ์๋ธํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
0. ๋ฆฌํฉํ ๋ง ์ ์ ์ฒด ์ฝ๋ class Employee { #name; #type; constructor(name, type) { this.validateType(type); this.#name = name; this.#type = type; } validateType(arg) { if (!['engineer', 'manager', 'salesperson'].includes(arg)) { throw new Error(`${arg}๋ผ๋ ์ง์ ์ ํ์ ์์ต๋๋ค.`); } } get type() { return this.#type; } toString() { return `${this.#name} (${this.#type})`; } } const mandoo = new Employee('๊ธฐํํ๋๋ง๋', 'eng..
[๋ฆฌํฉํฐ๋ง 2ํ] 11.13 ์์ธ๋ฅผ ์ฌ์ ํ์ธ์ผ๋ก ๋ฐ๊พธ๊ธฐ
0. ์ธ์ ์ฐ๋ฉด ์ข์๊น? ์์ธ๋ (๋ ์ด์ ์ข์ง ์์ ์ ๋๊น์ง) ๊ณผ์ฉ๋๊ณค ํ๋ค. ์์ธ๋ '๋ป๋ฐ์ ์ค๋ฅ'๋ผ๋, ๋ง ๊ทธ๋๋ก ์์ธ์ ์ผ๋ก ๋์ํ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. ํจ์ ์ํ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ์กฐ๊ฑด์ ํจ์ ํธ์ถ ์ ์ ๊ฒ์ฌํ ์ ์๋ค๋ฉด, ์์ธ๋ฅผ ๋์ง๋ ๋์ ํธ์ถํ๋ ๊ณณ์์ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋๋ก ํด์ผ ํ๋ค. 1. ์ ์ฐจ (1) ํฉํฐ๋ฆฌ ํจ์๋ฅผ ๋ง๋ ๋ค. ํฉํฐ๋ฆฌ ํจ์์ ๋ณธ๋ฌธ์์๋ ์๋์ ์์ฑ์๋ฅผ ํธ์ถํ๋ค. (2) ์์ฑ์๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ํฉํฐ๋ฆฌ ํจ์ ํธ์ถ๋ก ๋ฐ๊พผ๋ค. 2. ์์ ์ฝ๋ (1) ๋ฆฌํฉํฐ๋ง ์ ํด๋น ์ฝ๋์ ๋ฌธ์ ์ : ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ํตํด์ ๋ฐฐ์ด์ ํน์ ํ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ธ๋ฐ, ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌ๋ฐ์ ๋, ์ธ๋ฑ์ค๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ ๋๋ ์ธ๋ฑ์ค๊ฐ ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ฌ์ด์ฆ๋ณด๋ค ๋์ด๊ฐ๋๊ฑด ์คํจ ์ผ์ด์ค๋ก ์ถฉ๋ถํ ์์(expected..
[๋ฆฌํฉํฐ๋ง 2ํ] 11.12 ์ค๋ฅ ์ฝ๋๋ฅผ ์์ธ๋ก ๋ฐ๊พธ๊ธฐ
0. ์ธ์ ์ฐ๋ฉด ์ข์๊น? ์์ธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๊ณตํ๋ ๋ ๋ฆฝ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ด๋ค. ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์์ธ๋ฅผ ๋์ง๋ค. ๊ทธ๋ฌ๋ฉด ์ ์ ํ ์์ธ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ ๋๊น์ง ์ฝ์คํ์ ํ๊ณ ์๋ก ์ ํ๋๋ค. (ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ๋ณดํต์ ๋จ์ ๊ธฐ๋ณธ ๋์์ด ์ํ๋๋ค.) ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฅ ์ฝ๋๋ฅผ ์ผ์ผ์ด ๊ฒ์ฌํ๊ฑฐ๋ ์ค๋ฅ๋ฅผ ์๋ณํด ์ฝ์คํ ์๋ก ๋์ง๋ ์ผ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค. ์์ธ๋ ์ ํํ ์์ ๋ฐ์ ๋์์ผ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ ์ ๋์ ๋ฒ์ฃผ์ ๋ค์ง ์๋ ์ค๋ฅ๋ฅผ ๋ํ๋ผ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. (* ์์๋ฅผ ๋์ง๋ ์ฝ๋๋ฅผ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ฝ๋๋ก ๋ฐ๊ฟ๋ ํ๋ก๊ทธ๋จ์ด ์ฌ์ ํ ์ ์ ๋์ํ ์ง๋ฅผ ๋ฐ์ ธ๋ณด์. ์ ์ ๋์ํ์ง ์์ ๊ฒ ๊ฐ๋ค๋ฉด ์์ธ๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ๋ ์ ํธ์ด๋ค. ์์ธ ๋์ ์ค๋ฅ๋ฅผ ๊ฒ์ถํ์ฌ ํ๋ก๊ทธ๋จ์ ์ ์..
[๋ฆฌํฉํฐ๋ง 2ํ] 11.8 ์์ฑ์๋ฅผ ํฉํฐ๋ฆฌ ํจ์๋ก ๋ฐ๊พธ๊ธฐ
์ฐธ๊ณ : ํฉํ ๋ฆฌ ํจ์๋? https://ui.toast.com/posts/ko_20160905 ์๋ฐ์คํฌ๋ฆฝํธ์์ ํฉํ ๋ฆฌ ํจ์๋ ๋ฌด์์ธ๊ฐ? ํจ์์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ฐ์ง ์๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋จธ๋ก์ ๋ ๋์๊ฐ ์ ์์ ๊ฒ์ด๋ฉฐ, ์ด ๋ ๊ฐ์ง๊ฐ ํจ๊ป ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์กฐํฉ์ด๋ผ ๋ถ๋ฆฌ๋ ๊ฐ๋ ฅํ ๊ฐ์ฒด ํจ๋ฌ๋ค์์ ์์ํ๋๋ฐ ํ์๋ก ํ๋ ui.toast.com https://tpgns.github.io/2018/04/08/javaScript-factory-function-with-es6/ ES6+์ ํฉํ ๋ฆฌ ํจ์ - mido ์ด ๊ธ์ Eric Elliott ์ด medium์์ ์ฐ์ฌํ๋ Composing Software ์๋ฆฌ์ฆ๋ฅผ ๋ฒ์ญํ ๊ฒ์ ๋๋ค. [์๋ฌธ๋ณด๊ธฐ] Smoke Art Cubes to Smoke — MattysFlicks..