๐Ÿชฟ ๋• ํƒ€์ดํ•‘๊ณผ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…

thumb_hyeokยท2023๋…„ 4์›” 7์ผ
1
post-thumbnail

๐Ÿ’ก ๊ฐœ์š”

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ์‹œ์Šคํ…œ์€ โ€œ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…โ€์ด๋ผ๋Š” ๊ธ€์„ ํ•œ ๋ฒˆ์ฏค์€ ์ฝ์–ด๋ณด๊ฒŒ๋œ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ โ€œ๋• ํƒ€์ดํ•‘โ€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋ธ๋งํ•œ ๊ฒƒ์ด๋‹ค.

๊ณ ๋กœ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž…์‹œ์Šคํ…œ์ธ โ€œ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…โ€์„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋• ํƒ€์ดํ•‘์˜ ์ดํ•ด๊ฐ€ ๋ฌผ๋ก  ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ๋• ํƒ€์ดํ•‘์„ ์•Œ์•„๋ณด๋ฉด์„œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž…์ฒดํ‚น์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์ž.


๐Ÿค” ๋• ํƒ€์ดํ•‘์ด ๋ญ”๋ฐ?

๐Ÿค” ๊ฐ„๋‹จํžˆ ์ดํ•ดํ•˜๊ธฐ์— ์ด ์‚ฌ์ง„๋งŒํ•œ ๊ฒŒ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋• ํƒ€์ดํ•‘์ด๋ž€, โ€œ๋‚ด๊ฐ€ ์ •์˜ํ•œ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ ํƒ€์ž…์œผ๋กœ ์ธ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.โ€ ์–ด๋ ต๊ฒŒ ๋งํ•˜๋ฉด โ€œ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ์˜ ์ง‘ํ•ฉ์ด ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒโ€์„ ๋งํ•œ๋‹ค.

์‚ฌ์ง„์„ ๋ณด์ž. ๋‹น์žฅ ์ €๊ฒƒ์˜ ์ด๋ฆ„์ด ์ฝ˜์„ผํŠธ์ธ์ง€ ๋ผ์ง€์ฝ”์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. ๋‚ด๊ฐ€ ์ •์˜ํ•œ ๋™์ž‘(์ฝ”๋“œ๋ฅผ ๊ฝ‚์„ ์ˆ˜ ์žˆ๋‹ค!)๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ฝ˜์„ผํŠธ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋ž˜์—์„œ ์ฝ”๋“œ๋กœ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž.

class Outlet {
	stick() {
		console.log('...');
  }
	
	charge() {
		console.log('์ „๋ ฅ ๊ณต๊ธ‰ ์ค‘!');
	}
}

class PigNose {
	stick() {
		console.log('๊ฟ€!');
	}
}

function sticking(outlet) {
	outlet.stick();
}

function charging(outlet) {
	outlet.stick();
  outlet.charge();
}

const outlet = new Outlet();
const pigNose = new PigNose();

sticking(outlet);
sticking(pigNose);

charging(outlet);
charging(pigNose); // ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋ฐœ์ƒ!

์—ฌ๊ธฐ์„œ outlet ๊ณผ pigNose ๋ผ๋Š” ์ธ์Šคํ„ด์Šค๋“ค์„ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ž ์›ํ•˜๋Š” ๋™์ž‘์„ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ธ sticking ๊ณผ charging ์—์„œ ํ˜ธ์ถœํ–ˆ๋‹ค.
์ฝ˜์„ผํŠธ์™€ ๋ผ์ง€์ฝ”๋Š” ๋ชจ๋‘ ๊ฝ‚์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— sticking ์—์„œ๋Š” ์ฝ˜์„ผํŠธ์™€ ๋ผ์ง€์ฝ” ๋ชจ๋‘ ์ฝ˜์„ผํŠธ๋กœ ๊ฐ„์ฃผ๋˜์—ˆ์ง€๋งŒ, ๋ผ์ง€์ฝ”๋Š” ์ „๋ ฅ ๊ณต๊ธ‰์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— charging ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ โ€œ๋™์ ์ด๋ฉฐ ๋Ÿฐํƒ€์ž„ ์ค‘์— ์•ก์„ธ์Šค๋˜๋Š” ์œ ํ˜• ๊ตฌ์กฐ์˜ ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ๊ธฐ์ค€์œผ๋กœ ์œ ํ˜• ํ˜ธํ™˜์„ฑ์„ ๊ฒฐ์ •โ€ ํ•˜๋Š” ๋ฐฉ์‹์„ ๋• ํƒ€์ดํ•‘์ด๋ผ๊ณ  ํ•œ๋‹ค.


๐ŸŽ›๏ธ ๋• ํƒ€์ดํ•‘์˜ ํŠน์ง•์€?

์œ„์—์„œ ๋ดค๋“ฏ์ด, sticking ์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” โ€œ๋ผ์ง€์ฝ”๋ฅผ ์ฝ˜์„ผํŠธ๋กœ ์ž˜๋ชป ๊ฐ„์ฃผํ–ˆ๋‹คโ€ ์ด๋Ÿฌํ•œ ์ผ์ด ์‹ค์ œ๋กœ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์ผ์–ด๋‚œ๋‹ค๋ฉด ์œ„ํ—˜ํ•  ์ˆ˜๋„ ์žˆ์–ด๋ณด์ธ๋‹ค. ๋• ํƒ€์ดํ•‘์˜ ํŠน์ง•์€ ๋ญ๊ณ , ๋‹ค์†Œ ์œ„ํ—˜ํ•ด ๋ณด์ด๋Š” ๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋• ํƒ€์ดํ•‘์ด ์‚ฌ์šฉ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

1๏ธโƒฃ ๋‚ฎ์€ ์•ˆ์ •์„ฑ

๋ฐฉ๊ธˆ ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ๋• ํƒ€์ดํ•‘์€ ๋‚ฎ์€ ์•ˆ์ •์„ฑ์ด๋ผ๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋‹น์žฅ ์œ„ ์ฝ”๋“œ์—์„œ ์‚ดํŽด๋ณธ sticking ๊ณผ charging ์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ ์ฝ˜์„ผํŠธ๋ฅผ ์›ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋ผ์ง€์ฝ”๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ทน๋‹จ์ ์œผ๋กœ๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ string, number ๋“ฑ๋“ฑ ์•„๋ฌด๊ฑฐ๋‚˜ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋„ฃ๋”๋ผ๋„, ์˜๋„์น˜ ์•Š์€ ๋™์ž‘์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ (์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” ๋ผ์ง€์ฝ”์— stick ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ โ€œ๊ฟ€!โ€์ด ์ฝ˜์†”์— ์ฐํžˆ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.) ๋Ÿฐํƒ€์ž„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋ฟ์ด๋‹ค. (ํƒ€์ž…์ด ๋งž์ง€ ์•Š์•„๋„ ์‹คํ–‰์€ ๋œ๋‹ค.)

2๏ธโƒฃ ํŽธ๋ฆฌํ•จ โ†’ ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„

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

ํƒ€์ž…์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š”์—†์œผ๋‹ˆ ๊ฐœ๋ฐœ์ด (๋‹น์žฅ์€) ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰์ด ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  number , string ๋“ฑ๋“ฑ ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋งˆ๋‹ค ์˜ค๋ฒ„๋กœ๋”ฉ์ด๋‚˜ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์ฝ”๋“œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.


๐Ÿงฑ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…

๊ทธ๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋• ํƒ€์ดํ•‘์˜ ๋ชจ๋ธ๋งํ•œ โ€œ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…โ€์€ ์–ด๋–จ๊นŒ? ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๊ตฌ์กฐ์  ํƒ€์ž… ์‹œ์Šคํ…œ์€ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ , ๋™์ผํ•œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋ฉด ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

interface Crew {
  name: string;
	course: string;
}

interface Coach {
	name: string;
	course: string;
}

const printCrew = (crew: Crew) => {
	console.log(crew.name, crew.course);
}

Coach ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ printCrew ์— ๋Œ€์ž…ํ•œ๋‹ค๊ณ  ํ•ด๋„, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์•„๋ฌด๋Ÿฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. Crew ํƒ€์ž…๊ณผ Coach ํƒ€์ž…์€ ๋™์ผํ•œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด์™€๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ํƒ€์ž…๋„ ์กด์žฌํ•œ๋‹ค.

  • ๊ตฌ์กฐ์  ํƒ€์ž… ์‹œ์Šคํ…œ: ์‹ค์ œ ๊ตฌ์กฐ์™€ ์ •์˜์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ํƒ€์ž… ์‹œ์Šคํ…œ์˜ ํ•œ ์ข…๋ฅ˜
    • ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ , ๋™์ผํ•œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋ฉด ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค.
  • ๋ช…๋ชฉ์  ํƒ€์ž… ์‹œ์Šคํ…œ: ๋ช…์‹œ์  ์„ ์–ธ์ด๋‚˜ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜
    • ์ด๋ฆ„์ด ๊ฐ™์•„์•ผ์ง€๋งŒ ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค.

๋• ํƒ€์ดํ•‘์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…์€ ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ํƒ€์ž…๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ง‘ํ•ฉ ๋‹จ์œ„๋กœ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜๋Š” ์†์„ฑ ํ˜น์€ ์ค‘๋ณต๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ํฐ ์žฅ์ ์ด ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ํƒ€์ž…์— ๋น„ํ•ด ํƒ€์ž…์ด ๋นก๋นกํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์‚ฐ์„ฑ์„ ๋†’์œผ๋ฉด์„œ ๋• ํƒ€์ดํ•‘๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์•ˆ์ •์„ฑ๋„ ๊ฐ€์ง€๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์ž, ์ด์ œ ๋งจ ์ฒ˜์Œ์˜ ์˜ˆ์‹œ๋ฅผ ๋“ค๊ณ  ์™€์„œ ๋น„๊ตํ•ด ๋ณด์ž.

interface Outlet {
  stick: () => void;
	charge: () => void;
}

interface PigNose {
	stick: () => void;
}

const sticking = (outlet: Outlet) => {
	outlet.stick();
}

์ด๋ ‡๊ฒŒ Outlet ๊ณผ PigNose ํƒ€์ž…์„ ๊ฐ์ž ์ž‘์„ฑํ•ด๋†“์€ ๋’ค์— ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด, sticking ํ•จ์ˆ˜์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ค€๋‹ค๋ฉด PigNose ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ค„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

charge ๋ฉ”์„œ๋“œ๋ฅผ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ง์ด๋‹ค. ๋Ÿฐํƒ€์ž„์—์„œ ๋ฐœ์ƒํ•  ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•ด ๋ฌธ์ œ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ์•ˆ์ •์„ฑ์ด ์ƒ๊ฒผ๋‹ค!


๐ŸฅŠ ๋• ํƒ€์ดํ•‘ vs ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…

์ด์ œ ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ์•Œ์•„๋ดค์œผ๋‹ˆ, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‘ ๊ฐ€์ง€๋ฅผ ๋น„๊ตํ•ด๋ณด์ž.

  1. ๋• ํƒ€์ดํ•‘์€ ๋Ÿฐํƒ€์ž„์— ํƒ€์ž…์„ ์ฒดํฌํ•œ๋‹ค. (ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค)
  2. ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์—์„œ๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž…์„ ์ฒดํฌํ•œ๋‹ค.
  3. ๋• ํƒ€์ดํ•‘์€ ๋™์  ํƒ€์ดํ•‘์—์„œ, ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์€ ์ •์  ํƒ€์ดํ•‘์—์„œ ์“ฐ์ธ๋‹ค.

๐Ÿ“–ย ์ฐธ๊ณ  ์ž๋ฃŒ

profile
์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 4๊ธฐ ์›น ํ”„๋ก ํŠธ์—”๋“œ

0๊ฐœ์˜ ๋Œ“๊ธ€