CodeGym/ํ–‰๋™/Python SELF KO/๋‹ค์ค‘ ์ƒ์†

๋‹ค์ค‘ ์ƒ์†

์‚ฌ์šฉ ๊ฐ€๋Šฅ

10.1 ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›๊ธฐ

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

ํด๋ž˜์Šค์— ๋‹ค์„ฏ ๊ฐœ์˜ ๋ถ€๋ชจ๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ๋„ค ๊ฐ€๋Šฅ์„ฑ์„ ํฌ๊ฒŒ ํ™•์žฅ์‹œ์ผœ์ค˜์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ํŽธ๋ฆฌํ•ด์ ธ. ์ด๊ฑธ ํ•˜๋Š” ๊ฑด ์ •๋ง ์‰ฌ์›Œ โ€” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‚˜์—ดํ•˜๋ฉด ๋ผ:

class Base1:
    def method1(self):
        print("Method1 from Base1")

class Base2:
    def method2(self):
        print("Method2 from Base2")

class Derived(Base1, Base2):
    pass

obj = Derived()
obj.method1()
obj.method2()

๋ชจ๋“  ๊ฒƒ์ด ๊ณ„ํš๋Œ€๋กœ ์ž‘๋™ํ•ด โ€” ์•„๋ฆ„๋‹ค์›Œ.

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

10.2 ์—ฌ๋Ÿฌ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

ํด๋ž˜์Šค๋Š” ์ด๋ฆ„ ๋’ค์— ๊ด„ํ˜ธ๋กœ ๋‚˜์—ด๋œ ์—ฌ๋Ÿฌ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ์–ด. ์ด ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋“ค์€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด:

class Base1:
    def method(self):
        print("Method from Base1")

class Base2:
    def method(self):
        print("Method from Base2")

class Derived(Base1, Base2):
    pass


obj = Derived()
obj.method() # ์—ฌ๊ธฐ์„œ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ ๊นŒ?

์ด ์˜ˆ์ œ์—์„œ Derived ํด๋ž˜์Šค๋Š” Base1๊ณผ Base2์—์„œ ์ƒ์†๋ฐ›์•„. method()๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, Python์€ ์ฒซ ๋ฒˆ์งธ๋กœ ์ง€์ •๋œ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํƒํ•ด โ€” Base1.

ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ์ž๋ช…ํ•˜์ง€๋Š” ์•Š์•„, ๊ทธ๋ ‡์ง€? ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด ๋กœ์ง์ด ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ๋„ค๊ฐ€ ์–ด๋”˜๊ฐ€๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์–ด. ๊ทธ๋ƒฅ ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋“ค์ด ํ˜ธ์ถœ๋˜๊ธฐ ์‹œ์ž‘ํ•  ๋ฟ์ด์•ผ :)

10.3 ๋‹ค์ค‘ ์ƒ์†์—์„œ super() ์‚ฌ์šฉ

๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ์ ์€ ๋‹ค์ค‘ ์ƒ์†์—์„œ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— super()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฑฐ์•ผ.

์˜ˆ์ œ:

class Base1:
    def method(self):
        print("Method from Base1")
        super().method()

class Base2:
    def method(self):
        print("Method from Base2")
        super().method()

class Derived(Base1, Base2):
    def method(self):
        print("Method from Derived")
        super().method()


obj = Derived()
obj.method()

์ž, ํ™”๋ฉด์— ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋ ๊นŒ?

Method from Derived
Method from Base1

์•„๋‹ˆ๋ฉด

Method from Derived
Method from Base2 

์„œํ”„๋ผ์ด์ฆˆ โ€” ์ถœ๋ ฅ์€ ์ด๋ ‡๊ฒŒ ๋‚˜์˜ฌ ๊ฑฐ์•ผ:

Method from Derived
Method from Base1
Method from Base2

super().method()๋Š” ๊ฐ ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ method()๋ฅผ ํ˜ธ์ถœํ•  ๊ฑฐ์•ผ! ์ด๊ฒŒ ๋‚ด๊ฐ€ ๋‹ค์ค‘ ์ƒ์†์— ๋Œ€ํ•ด ์ฒ˜์Œ ์–ธ๊ธ‰ํ–ˆ์„ ๋•Œ ๋งํ–ˆ๋˜ ๊ทธ๋Ÿฐ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด์ ๋“ค์ด์•ผ.

10.4 ๋‹ค์ด์•„๋ชฌ๋“œ (Diamond) ์ƒ์†

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋‹ค์ด์•„๋ชฌ๋“œ ์ƒ์†์ด๋ผ๋Š” ๊ณ ์ „์ ์ธ ๋ฌธ์ œ. ์ด๊ฑด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์˜ˆ์ œ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ๋” ์‰ฌ์›Œ:

์ด ์ฝ”๋“œ๋กœ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ ‡๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์–ด:

class A:
    def method(self):
        print("Method from A")

class B(A):
    def method(self):
        print("Method from B")
        super().method()

class C(A):
    def method(self):
        print("Method from C")
        super().method()

class D(B, C):
    def method(self):
        print("Method from D")
        super().method()



obj = D()
obj.method()

์ถœ๋ ฅ์€ ์ด๋ ‡๊ฒŒ ๋  ๊ฑฐ์•ผ:

Method from D
Method from B
Method from C
Method from A 

๋‹ค์ค‘ ์ƒ์†์—์„œ ๋ฐฉํ–ฅ์„ ์žƒ์ง€ ์•Š์œผ๋ ค๋ฉด Python์ด ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ž˜ ์•Œ์•„์•ผ ํ•ด. ๋‹ค์Œ ๊ฐ•์˜์—์„œ ๊ทธ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋  ๊ฑฐ์•ผ.

2
๊ณผ์ œ
Python SELF KO,  ๋ ˆ๋ฒจ 16๋ ˆ์Šจ 4
์ž ๊ธˆ
๊ธฐ๋ณธ ํด๋ž˜์Šค.
๊ธฐ๋ณธ ํด๋ž˜์Šค.
2
๊ณผ์ œ
Python SELF KO,  ๋ ˆ๋ฒจ 16๋ ˆ์Šจ 4
์ž ๊ธˆ
์Šˆํผ ์•ก์…˜.
์Šˆํผ ์•ก์…˜.
์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค