profile-img
The merit of an action lies in finishing it to the end.
slide-image

Heap์˜ ๊ฐœ๋…

ํž™์€ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ๋ฐ, "complete tree"์ด๊ฑฐ๋‚˜ "nearly complete tree"์ด์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค.

max-heap์˜ ๊ฒฝ์šฐ ๊ฐ ๋…ธ๋“œ์˜ key ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ๋“ค์˜ key ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , min-heap์˜ ๊ฒฝ์šฐ ๊ฐ ๋…ธ๋“œ์˜ key ๊ฐ’์€ ์ž์‹ ๋…ธ๋“œ๋“ค์˜ key ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

 

 

max-heap & min-heap

Heap์˜ ํŠน์„ฑ

max-heap์„ ๊ธฐ์ค€์œผ๋กœ ์‚ดํŽด๋ณด์ž. ํž™์˜ root๋Š” ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, root์˜ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋„ ๊ฐ™์€ ํŠน์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ๋งŒ์•ฝ min-heap์ด๋ผ๋ฉด ํž™์˜ root๊ฐ€ ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

๊ตฌํ˜„์€ ์ฃผ๋กœ linked list๋ณด๋‹ค๋Š” array๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

array๋กœ ๊ตฌํ˜„ํ•œ heap

๋…ธ๋“œ์™€ ์ž์‹ ๊ฐ„์˜ ๊ด€๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

index๊ฐ€ i์ธ ๋…ธ๋“œ๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค๋ฉด,

    • i๋ฒˆ์งธ ๋…ธ๋“œ ์™ผ์ชฝ ์ž์‹: 2i+1
    • i๋ฒˆ์งธ ๋…ธ๋“œ ์˜ค๋ฅธ์ชฝ ์ž์‹: 2i+2
    • i๋ฒˆ์งธ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ: floor((i-2)/2)
    • j๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ ์ž์‹์ด๋ฉด, ์˜ค๋ฅธ์ชฝ ์ž์‹์€ j+1

 

Heap์˜ ์—ฐ์‚ฐ

Heap์—์„œ ์ž๋ฃŒ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆœํšŒ, ๊ฒ€์ƒ‰, ์ถœ๋ ฅ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ํž™์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ, root์˜ key ๊ฐ’์ด ๊ฐ€์žฅ ํฌ๊ฑฐ๋‚˜ (max-heap) ์ž‘์•„์•ผ (min-heap) ํ•˜๊ณ  ๊ทธ ํŠน์„ฑ์ด ๋ชจ๋“  ์„œ๋ธŒํŠธ๋ฆฌ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ •์˜ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ (nearly) complete tree๋ผ๋Š” ํŠน์„ฑ๋„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋ฅผ ํ•œ ํ›„ ๊ทธ๋ƒฅ ๊ฐ€๋งŒํžˆ ๋‘”๋‹ค๋ฉด ํž™์˜ ์ •์˜๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” Reheap up / Reheap down ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ heap์˜ ๋ชจ์–‘์„ ์œ ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.

์ˆ˜๋„์ฝ”๋“œ์˜ ๊ฒฝ์šฐ, ์ˆœํšŒ, ๊ฒ€์ƒ‰, ์ถœ๋ ฅ ์ž์ฒด๋Š” ๊ธฐ์กด ํŠธ๋ฆฌ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ฐ๊ณ , ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ๊ฐ ํ•จ์ˆ˜์˜ ๋’ท๋ถ€๋ถ„์—์„œ Reheap up, Reheap downํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ํ•˜๊ฒ ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” Reheap Up ๋ฐ Reheap Down์— ๋Œ€ํ•ด์„œ๋งŒ ์†Œ๊ฐœํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

Reheap Up

์‚ฝ์ž… ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…๋œ ์š”์†Œ๋ฅผ ์œ„์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฉด์„œ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์‚ฝ์ž… ์ž์ฒด๋Š” ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๋นˆ leaf node์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— heap์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” node๋ฅผ ์ด๋™์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

reheap up์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋‹จ๊ณ„

์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ key ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ, ๋งŒ์•ฝ ์‚ฝ์ž…๋œ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ key ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์„œ๋กœ ์œ„์น˜๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๊ณ„์† ๋ฐ˜๋ณตํ•˜์—ฌ heap์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€์‹œํ‚จ๋‹ค.

์ˆ˜๋„์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

void reheapUp (HEAP *heap, NODE *newNode) {
	if (newNode != root) {
		parent = parent->newNode;
		if (newNode->key > parent->key) {
			swap(newNode, parent);
			reheapUp(heap,parent);
		}
	}
}

 

Reheap Down

heap์€ nearly complete tree์ด๋ฏ€๋กœ root์„ ๋ฐ”๋กœ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด, heap์˜ ๊ตฌ์กฐ๊ฐ€ ์œ ์ง€๋˜์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ last tree node์˜ ๊ฐ’์„ root๋กœ ์˜ฎ๊ธด ํ›„, root๋ฅผ ์•„๋ž˜๋กœ ์ด๋™์‹œ์ผœ์„œ heap์˜ ๋ฐฐ์—ด ํŠน์„ฑ(heap-ordering property)์ด ์ถฉ์กฑ๋˜๋„๋ก ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.

root ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ, ๊ทธ๋ƒฅ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด heap์˜ ๊ตฌ์กฐ๊ฐ€ ๋ถ•๊ดด๋˜๋ฏ€๋กœ, ์ž์‹ ๋…ธ๋“œ ์ค‘ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ์™€ ๊ฐ’์„ ๊ตํ™˜ํ•ด๊ฐ€๋ฉฐ heap ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚จ ํ›„ ์‚ญ์ œํ•œ๋‹ค.

์ˆ˜๋„์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

void reheapDown (HEAP *heap, NODE *root, int last) {
	if (root->left) {
		int leftKey = root->left->key;
		if (root->right) {
			int rightKey = root->right->key;
		}
		else {
			int rightKey = NULL;
		}
	}
	if (leftKey > rightKey) {
		largeSubtree = root->left;
	}
	else {
		largeSubtree = root->right;
	}
	if (root->key < largeSubtree->key) {
		swap(root, largeSubtree);
		reheapDown(heap, largeSubtree, last);
	}
}

class & self

class(ํด๋ž˜์Šค)๋ž€, ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์ด ํ•จ๊ป˜ ๋ฌถ์—ฌ ์žˆ๋Š” ํ•˜๋‚˜์˜ ํ‹€์ด๋‹ค. ์ด ํ‹€์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ object(๊ฐ์ฒด)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” ๋…๋ฆฝ์ ์ด์–ด์„œ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

 

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์ž.

ํด๋ž˜์Šค๋Š” ์ดˆ์ฝœ๋ฆฟ์„ ๋งŒ๋“œ๋Š” ํ‹€๊ณผ ๊ฐ™๋‹ค. ๋…น์€ ์ดˆ์ฝœ๋ฆฟ์„ ํ‹€์— ๋ถ€์–ด ์ดˆ์ฝœ๋ฆฟ์„ ๋ฌดํ•œ์ • ์ƒ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ‹€๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ๊ฐ์˜ ์ดˆ์ฝœ๋ฆฟ์„ ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๊ฐ๊ฐ์˜ ์ดˆ์ฝœ๋ฆฟ์€ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ์ดˆ์ฝœ๋ฆฟ์— ์–ด๋–ค ๋ฐ์ฝ”๋ ˆ์ด์…˜์„ ์˜ฌ๋ฆฌ๋”๋ผ๋„ ๋‹ค๋ฅธ ์ดˆ์ฝœ๋ฆฟ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

 

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

 

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

class chocoMaker:
	pass
    
a = chocoMaker() # a ๊ฐ์ฒด ์ƒ์„ฑ
b = chocoMaker() # b ๊ฐ์ฒด ์ƒ์„ฑ

์•„์ง chocoMaker๋ผ๋Š” ํด๋ž˜์Šค์— ์•„๋ฌด ๊ฐ’์ด๋‚˜ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.

ํด๋ž˜์Šค์— ํ•จ์ˆ˜๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

class chocoMaker:
    def decorate(self, color, type):
    	self.color = color
        self.type = type
        
a = chocoMaker()
a.decorate('white', 'sprinkle')

ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜๋Š” method(๋ฉ”์„œ๋“œ)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋Œ€๊ฐœ self๋ฅผ ์“ด๋‹ค. self์˜ ์—ญํ• ์€ ๊ฐ์ฒด ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์œ„์™€ ๊ฐ™์ด ๊ฐ์ฒด.๋ฉ”์„œ๋“œ(...) ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์˜€๋˜ self๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๊ฐ์ฒด.๋ฉ”์„œ๋“œ(...)์—์„œ ๊ฐ์ฒด๊ฐ€ self๋กœ ์ž๋™์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งŒ์•ฝ ์ด ๋ฐฉ๋ฒ•์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค.

a = chocoMaker()
chocoMaker.decorate(a, 'white', 'sprinkle')

decorate ๋ฉ”์„œ๋“œ์˜ ์ˆ˜ํ–‰๋ฌธ์„ ์‚ดํŽด๋ณด์ž.

a.decorate('white', 'sprinkle')๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด, a๋ผ๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์— color, type ๊ฐ์ฒด๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , 'white', 'sprinkle'๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ์ฒด ๊ฐ„์—” ๋…๋ฆฝ์„ฑ์ด ๋ณด์žฅ๋˜๋ฏ€๋กœ, ํ•œ ๊ฐ์ฒด์˜ ๊ฐ์ฒด๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ฐ์ฒด๋ณ€์ˆ˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.

 

init/์ƒ์„ฑ์ž

chocoMaker ํด๋ž˜์Šค์— ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋„ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

class chocoMaker:
    def decorate(self, color, type):
    	self.color = color
        self.type = type
    def plate(self):
    	res = self.color + self.type
        return res

plate ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์ด ์ƒํ™ฉ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

b = chocoMaker()
b.plate()

์ด์œ ๋Š” ์•ž์„œ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ decorate ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ ๋Š” plate ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ decorate ์ˆ˜ํ–‰ ํ›„ plate๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋ฉด ๋ถˆํŽธํ•˜๋‹ค. ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

์šฐ๋ฆฌ๋Š” ์ด๋Ÿด ๋•Œ ์ƒ์„ฑ์ž(constructor)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. __init__์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

class chocoMaker:
    def __init__(self, color, type):
        self.color = color
        self.type = type
    def decorate(self, color, type):
    	self.color = color
        self.type = type
    def plate(self):
    	res = self.color + self.type
        return res

c = chocoMaker('pink', 'decopen')

c๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ, decorate๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ํ•„์š” ์—†์ด chocoMaker์™€ ํ•จ๊ป˜ ์›ํ•˜๋Š” ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒ์†

์ฝ”๋“œ๋ฅผ ์งœ๋‹ค ๋ณด๋ฉด ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ–๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ‰๊น”๊ณผ ๋ฐ์ฝ”๋ ˆ์ด์…˜์˜ ์ข…๋ฅ˜๋งŒ์„ ๊ฐ–๋Š” chocoMaker ํด๋ž˜์Šค์—์„œ ๋ฐ์ฝ”๋ ˆ์ด์…˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ธฐ์กด์˜ chocoMaker ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“œ๋Š” ํŽธ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค. ์ด๋Ÿด ๋•Œ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด super().__init__๋ฅผ ์ด์šฉํ•œ ์ƒ์†์ด๋‹ค.

class superChocoMaker(chocoMaker):
    def __init__(self, color, type, num): # num ์ถ”๊ฐ€
        super().__init__(color, type)
        self.num = num
        
    def superPlate(self): # ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†
        super().plate()

ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํด๋ž˜์Šค ์˜† ๊ด„ํ˜ธ ์•ˆ์— ์ƒ์†ํ•  ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ์ ์–ด๋‘” ๋‹ค์Œ, super().__init__์˜ input์œผ๋กœ ์ƒ์†ํ•  ๊ธฐ์กด ํด๋ž˜์Šค์˜ ์š”์†Œ์˜ ์ด๋ฆ„์„ ์ ์–ด์ค€๋‹ค.

๋•Œ๋กœ๋Š” ์ƒˆ๋กœ ๋งŒ๋“  ํด๋ž˜์Šค์—์„œ ๊ธฐ์กด์˜ ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ์—๋Š” ๊ทธ๋ƒฅ ์ƒ์†๋ฐ›์€ (์ƒˆ๋กœ ๋งŒ๋“ ) ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

๊ธฐ์กด ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ๋Š” super().๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

'CS study/ํŒŒ์ด์ฌ ๊ธฐ์ดˆ' Related Articles +
1 2 3