• ๐Ÿ’ปPython:: Class

    2024. 1. 26.

    by. @leeeun

    ๐Ÿ“‚Class

    ๐Ÿ“ŒClass๋ž€?

    ์„œ๋กœ ๊ด€๋ จ์„ฑ์ด ํฐ ๋ฐ์ดํ„ฐ(attribute)์™€ ํ•จ์ˆ˜(methods)๋ฅผ ํ•œ ๋ฐ ๋ฌถ๋Š” ํ–‰์œ„
    ํด๋ž˜์Šค์˜ ํ•„์š”์„ฑ) ๊ฐ™์€ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ณ„์ ์ธ ํ•จ์ˆ˜๋ฅผ ๋งค๋ฒˆ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.

    ๊ณผ์ž ํ‹€ - class, ๊ณผ์ž ํ‹€๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ณผ์ž - object ์— ๋Œ€์‘
    ๋™์ผํ•œ ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋“ค์€ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

    ํŠน์ • class ๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฐ์ฒด๋“ค์˜ ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜๋Š” ๊ฐ๊ฐ ๋ฉค๋ฒ„ ๋ฐ์ดํ„ฐ์™€ ๋ฉค๋ฒ„ ๋ฉ”์†Œ๋“œ๋ผ๊ณ  ํ•จ.

     

    ๐Ÿ“ŒClass ์ƒ์„ฑํ•˜๊ธฐ

    ๊ธฐ๋ณธ๊ตฌ์กฐ

    class FourCal:
    	pass #์•„๋ฌด๊ฒƒ๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๋ฌธ๋ฒ•. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์žˆ์Œ.
    a=FourCal() #a๋Š” FourCal class์˜ ๊ฐ์ฒด
    type(a) # FourCal์˜ ์ธ์Šคํ„ด์Šค์ž„์„ ์ถœ๋ ฅํ•ด์คŒ.

    a=calculator()
    #a๋Š” ๊ฐ์ฒด์ด์ž ํด๋ž˜์Šค calculator์˜ ์ธ์Šคํ„ด์Šค์ž„.

     

    ๐Ÿ“ŒClass ๊ด€๋ จ ์šฉ์–ด

    • method class ์•ˆ์— ๊ตฌํ˜„๋œ ํ•จ์ˆ˜
      method ํ˜ธ์ถœ ๋ฐฉ๋ฒ•
      (1) ํด๋ž˜์Šค์ด๋ฆ„.method : self๋ฅผ ๋ฐ˜๋“œ์‹œ ์ „๋‹ฌ
      (2) ๊ฐ์ฒด.method : self๋ฅผ ๋ฐ˜๋“œ์‹œ ์ƒ๋žต
    • self ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ๋ณ€์ˆ˜
      method์˜ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜(self)์—๋Š” ๊ทธ method๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋จ. self ๋ง๊ณ  ๋‹ค๋ฅธ ์ด๋ฆ„ ์‚ฌ์šฉํ•ด๋„ ๋จ.
      class ์•ˆ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ์—๋Š” ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ํด๋ž˜์Šค ๋ฐ–์—์„œ method๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” python์ด ์ž๋™์œผ๋กœ ๋ถ™์—ฌ์ฃผ๋ฏ€๋กœ ์ž…๋ ฅ๊ฐ’์— ๋„ฃ์–ด์ค„ ํ•„์š” ์—†์Œ.
    • ๊ฐ์ฒด๋ณ€์ˆ˜ ๊ฐ์ฒด์— ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋งŒ์˜ ๋ณ€์ˆ˜ ๋ฐ‘ ์˜ˆ์‹œ์˜ first
      ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๊ฐ์ฒด์˜ ๊ฐ์ฒด ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ฐ์ฒด๋ณ€์ˆ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์›๋ž˜ ๊ฐ’์„ ์œ ์ง€ํ•จ.
    class FourCal(): #์‚ฌ์น™์—ฐ์‚ฐ ํด๋ž˜์Šค
    	def setdata(self, first, second): #๊ฐ์ฒด์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹น method๋ฅผ ํ• ๋‹นํ•œ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋จ.
        	self.first=first #setdata(3,4)ํ–ˆ์„ ๋•Œ a.first=3์ด ๋˜๋„๋ก
            #a.first=3 a ๊ฐ์ฒด์— ๊ฐ์ฒด๋ณ€์ˆ˜ first๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ฐ’ 4๊ฐ€ ์ €์žฅ
            self.second=second 
        def add(self):
            result=self.first+self.second 
            return result
            #self.fist ๋งค๊ฐœ๋ณ€์ˆ˜์— ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์ง€์ •ํ•ด์ค„ ํ•„์š” ์—†์Œ. ์ด ํ•จ์ˆ˜ ์•ˆ์—์„œ setdata ํ•  ํ•„์š”๋„ ์—†์Œ.
        # ํ•จ์ˆ˜ ์‚ฌ์šฉํ•  ๋•Œ setdat๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ–ˆ์œผ๋ฉด ๋งŒ๋“ค์–ด์ง„ a.first์™€ a.second๋Š” ๊ณต์œ ๋จ
        
    # setdata๋ฅผ ๊ตณ์ด ๋งŒ๋“œ๋Š” ์ด์œ ) data๋ฅผ ํ•จ์ˆ˜ ํ˜ธ์ถœํ• ๋•Œ๋งˆ๋‹ค ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ํ•œ ๋ฒˆ ์ž…๋ ฅํ•˜๋ฉด ํ•จ์ˆ˜์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋„๋ก
     
    #class ์‚ฌ์šฉํ•ด๋ณด๊ธฐ       
    a=FourCal(4,2)
    a.first=4 # a ๊ฐ์ฒด์— ๊ฐ์ฒด๋ณ€์ˆ˜ first๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  4๋ผ๋Š” ๊ฐ’์ด ์ €์žฅ๋จ.
    b=FourCal(3,8)
    b.first=3 # a๊ฐ์ฒด์˜ ๊ฐ์ฒด๋ณ€์ˆ˜ first๋Š” ์—ฌ์ „ํžˆ 4. 
    • ํด๋ž˜์Šค ๋ณ€์ˆ˜
      ํด๋ž˜์Šค ์•ˆ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜. ํด๋ž˜์Šค ์•ˆ์˜ ํ•จ์ˆ˜ ์•ˆ์˜ ๋ณ€์ˆ˜xx
      ํด๋ž˜์Šค์ด๋ฆ„.ํด๋ž˜์Šค๋ณ€์ˆ˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋จ.
    class Myname:
    	name='lee' #ํด๋ž˜์Šค ๋ณ€์ˆ˜ name
        
    print(Myname.name) #'lee'๊ฐ€ ์ถœ๋ ฅ๋จ

    ๊ฐ์ฒด ๋ณ€์ˆ˜<->ํด๋ž˜์Šค ๋ณ€์ˆ˜: ํด๋ž˜์Šค ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ๊ทธ ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด์— ๊ณต์œ ๋œ๋‹ค.

    a=Myname()
    b=Myname()
    print(a.name) #'lee'์ถœ๋ ฅ
    Myname.name='kim' #ํด๋ž˜์Šค ๋ณ€์ˆ˜ name์„ 'kim'์œผ๋กœ ๋ณ€๊ฒฝ
    print(a.name) #'kim'์ถœ๋ ฅ
    print(b.name) #'kim'์ถœ๋ ฅ

    ๋Œ€ํ‘œ์ ์œผ๋กœ ํด๋ž˜์Šค์—์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฐ์ฒด์˜ ๊ฐฏ์ˆ˜ ์„ธ๊ธฐ์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋จ.

    class Student:
    	#ํด๋ž˜์Šค๋ณ€์ˆ˜
        countStudent=0
        
        def __init__(self,givenid,givenname):
        self.id=givenid
        self.name=givenname
        Student.countStudent=Student.countStudent+1 #ํด๋ž˜์Šค๋ณ€์ˆ˜์ด๋ฏ€๋กœ student๋กœ์‹œ์ž‘
    
    __init__์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜.
    ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ๋งˆ๋‹ค countStudent 1์”ฉ ์ฆ๊ฐ€-> countStudent ์ถœ๋ ฅํ•˜๋ฉด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์˜ ๊ฐฏ์ˆ˜ ์…€ ์ˆ˜ ์žˆ์Œ.

     

    ํด๋ž˜์Šค ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๊ฐ์ฒด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ

    ๊ฐ์ฒด๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑ๊ฐ€๋Šฅ
    Myname.name -> ํด๋ž˜์Šค ๋ณ€์ˆ˜ ํด๋ž˜์Šค์ด๋ฆ„.ํด๋ž˜์Šค๋ณ€์ˆ˜ ํ˜•ํƒœ
    a.name() -> ๊ฐ์ฒด ๋ณ€์ˆ˜. ๊ฐ์ฒด.๊ฐ์ฒด๋ณ€์ˆ˜ ํ˜•ํƒœ

    a.name='park'

    Myname ํด๋ž˜์Šค์˜ name์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ a ๊ฐ์ฒด์— name ๊ฐ์ฒด ๋ณ€์ˆ˜๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋จ.
    ์ด๋Š” class์˜ ๊ฐ™์€ ์ด๋ฆ„์˜ ํด๋ž˜์Šค๋ณ€์ˆ˜ name์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

    ๋‹จ, ํด๋ž˜์Šค๋ณ€์ˆ˜์˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ ์‹œ ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜๋„ ๋ณ€๊ฒฝ๋จ

     

    ๐Ÿ“Œ์ƒ์„ฑ์ž(Constructor) : ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” method

    ์œ„ ์ฝ”๋“œ์—์„œ addํ•จ์ˆ˜๋Š” first์™€ second ๋ณ€์ˆ˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ setdata ์ˆ˜ํ–‰ ์ „ addํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ.
    ๋ฉค๋ฒ„ attribute๋ฅผ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™”, ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋ฐ˜๋“œ์‹œ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• 
    ๊ฐ์ฒด์— ์ดˆ๊นƒ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•  ๋•Œ-> ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ method ํ˜ธ์ถœ๋ณด๋‹ค๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉ
    (class ์•ˆ์˜ ํ•จ์ˆ˜๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’)

    ๊ธฐ๋ณธ๊ตฌ์กฐ

    def __init__(self,first,second):
    	self.first=first
        self.second=second
    #๊ฐ์ฒด ์ƒ์„ฑ์‹œ ์ฐจ์ด์ 
    a=FourCal() -> ์˜ค๋ฅ˜ ๋ฐœ์ƒ. ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ first์™€ second์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์ „๋‹ฌ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—
    a=FourCal(4,2) #__init__method๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ first์™€ second๋ผ๋Š” ๊ฐ์ฒด ๋ณ€์ˆ˜ ์ƒ์„ฑ

    method ์ด๋ฆ„์„ __init__ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ž๋กœ ์„ค์ •๋จ.
    setdata์™€ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ˆ˜ํ–‰๋ฌธ์€ ๋™์ผ.

    • ์ฃผ์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜(init)๋Š” ๋‹ค๋ฅธ method์™€ ๋‹ฌ๋ฆฌ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์— ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ class์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” first์™€ second์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜๋“œ์‹œ ๊ฐ™์ด ์ „๋‹ฌํ•ด์ค˜์•ผ ํ•จ.
    • 'init() should return None'
      ์ƒ์„ฑ์ž๋Š” return๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์Œ.

     

    ๐Ÿ“Œํด๋ž˜์Šค์˜ ์ƒ์†(Inheritance)

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

    ๊ธฐ๋ณธ๊ตฌ์กฐ)
    class ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ด๋ฆ„(์ƒ์†ํ•  ํด๋ž˜์Šค ์ด๋ฆ„)
    ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๊ฐ€ () ์•ˆ์˜ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ(methods)๊ณผ ๋ฐ์ดํ„ฐ(attribute)๋ฅผ ์ƒ์†ํ•จ. self.first์™€ self.second๋„ ๊ณต์œ ํ•จ. ์ถ”๊ฐ€ํ•ด์ค„ ํ•„์š” ์—†์Œ.

    class newFourCal(Fourcal):
    	pass
    #Fourcal ํด๋ž˜์Šค์˜ add, mod ๋“ฑ ๋ชจ๋“  ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
    a=newFourCal(4,2)
    a.add() -> 6
    • super() ํ•จ์ˆ˜ : ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜
      super().๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ() -> ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ method๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ. str, init๊ณผ ๊ฐ™์€ ๊ฒƒ
      ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ instance ์†์„ฑ์€ ์ž์‹ ํด๋ž˜์Šค์— ์ƒ์†๋˜์ง€ ์•Š๋Š”๋‹ค

     

    ๐Ÿ“Œ Method Overriding(๋ฎ์–ด์“ฐ๊ธฐ)

    ์˜๋ฏธ: ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” method๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ, ์ฆ‰ ๋ฎ์–ด์“ฐ๊ธฐ.
    ๋ฎ์–ด์“ด ์ดํ›„์— method๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ method๊ฐ€ ์•„๋‹Œ overridingํ•œ method๊ฐ€ ํ˜ธ์ถœ๋จ.

     

    ๐Ÿ“Œ str method:

    (1) ํ•ด๋‹น ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด(instance) ์ž์ฒด๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ๋ฌธ์ž์—ด๋กœ ์„ค๋ช… (class๊ฐ€ admin ํŽ˜์ด์ง€์—์„œ ์–ด๋–ป๊ฒŒ ์ถœ๋ ฅ๋˜๋Š”์ง€๋ฅผ ์ •์˜
    print(๊ฐ์ฒด์ด๋ฆ„)->str method๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๋ฌธ์ž์—ด๋กœ ๊ฐ์ฒด์˜ ์ •๋ณด(ํด๋ž˜์Šค ์ด๋ฆ„,์ €์žฅ์œ„์น˜)๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
    (2) ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ-> print(๊ฐ์ฒด์ด๋ฆ„)์œผ๋กœ init์—์„œ ๊ทœ์ •ํ•œ ๋ณ€์ˆ˜์˜ ์ถœ๋ ฅ ํ˜•์‹์„ ์ง€์ •

    __str__() ํ•จ์ˆ˜ ์ด์šฉํ•˜๊ธฐ
    class Student:
        def __init__(self, givenID, givenName):
            self.id = givenID
            self.name = givenName
    
        def __str__(self): #print(๊ฐ์ฒด์ด๋ฆ„) ํ–ˆ์„ ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ๋ฌธ์ž์—ด์˜ ์ •๋ณด ์•Œ๋ ค์คŒ.
            msg = "id:{}, name:{}".format(self.id, self.name)
            return msg
    
    student1 = Student(20190001, "Harry Potter") 
    print(student1) #student1.__str__()๊ณผ str(student1)์€ ๊ธฐ๋Šฅ์ด ๊ฐ™์Œ.
    
    #getID์™€ getName ํ•จ์ˆ˜ ์ •์˜ ์•ˆ ํ•ด์ค˜๋„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์•ˆํ•˜๋Š”๋ฐ..? return์„ ๊ผญํ•ด์ค˜์•ผ ํ•˜๋‚˜

     

    ๐Ÿ“Œ Private Attribute

    ๋ฉค๋ฒ„ attribute์˜ ์ด๋ฆ„
    ๊ฐ•์ œ์ ์œผ๋กœ attribute์„ ์ง์ ‘ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์„ ๋ง‰์•„์คŒ. ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ  ๋ฉค๋ฒ„ method๋ฅผ ํ†ตํ•ด์„œ๋Š” ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Œ.
    self.id, countStudent ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฉค๋ฒ„ attribute์˜ ์ด๋ฆ„ ์•ž์— __ ๋ฅผ ํ•˜๋Š” ํ˜•์‹

     

    ๐Ÿ“Œ ํฌํ•จ๊ด€๊ณ„(has-a realationship)

    ์ƒ์† ๊ด€๊ณ„(x)
    A ํด๋ž˜์Šค์˜ ์†์„ฑ์— instance๋ฅผ ๋„ฃ์–ด์„œ Aํด๋ž˜์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ Bํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฉค๋ฒ„ attribute๋กœ ๊ฐ€์ง€๋ฉด Aํด๋ž˜์Šค์™€ Bํด๋ž˜์Šค๋ฅผ ํฌํ•จ๊ด€๊ณ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    class Student:
    	def __init__:
        def ์–ด์ฉŒ๊ตฌ์ €์ฉŒ๊ตฌ..
        
    class Department:
        def __init__(self):
            memberStudent = Student()

    ๋Œ“๊ธ€