๐Ÿ [Python] แ„แ…ณแ†ฏแ„…แ…ขแ„‰แ…ณ & แ„†แ…ฆแ„‰แ…ฉแ„ƒแ…ณ แ„‰แ…ตแ†ทแ„’แ…ช - 1แ„‡แ…ฎ

๋“ค์–ด๊ฐ€๋ฉฐ

๊ณผ๊ฑฐ์— ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ ํ˜น์€ ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ค‘์‹ฌ์œผ๋กœ ์ฝ”๋”ฉ์ด ๋˜์—ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์†ํ•ด์„œ ๊ฐœ์„  ๋  ์ˆ˜๋ก ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฉ๋Œ€ ํ•ด์ง€๊ณ , ๋ฉ์น˜๊ฐ€ ์ปค์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฌธ์ œ๋Š” ์ฝ”๋“œ์˜ ์ค‘๋ณต๊ณผ ํ˜‘์—… ๋Šฅ๋ ฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋ณต์žกํ•ด์ง€๊ฒŒ ๋œ๋‹ค.

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


๋ณธ๋ก 

์ผ๋ฐ˜์ ์ธ ์ฝ”๋”ฉ

๊ณผ๊ฑฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ˆ์ฐจํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ˜•์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋”ฉ์˜ ๋‹จ์ ์€ ์ฐจ๋Ÿ‰์ด ๋Š˜์–ด ๋‚  ์ˆ˜๋ก ์ฝ”๋“œ์˜ ์–‘์ด ๋งŽ์•„์ง„๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์กด์žฌํ•œ๋‹ค.

# Chapter02-01
# ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ -

# ์ฐจ๋Ÿ‰1
car_company_1 = 'Ferrari'
car_detail_1 = [
    {'color': 'white'},
    {'horsepower': 400},
    {'price': 8000}
]

# ์ฐจ๋Ÿ‰2
car_company_2 = 'BMW'
car_detail_2 = [
    {'color': 'black'},
    {'horsepower': 400},
    {'price': 8000}
]

# ์ฐจ๋Ÿ‰3
car_company_3 = 'BMW'
car_detail_3 = [
    {'color': 'Silver'},
    {'horsepower': 300},
    {'price': 6000}
]


๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ

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

# ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ
car_company_list = ['Ferrari', 'BMW', "Audi"]
car_detail_list = [
    {'color': 'white', 'horsepower': 400, 'price': 800},
    {'color': 'black','horsepower': 400, 'price': 800},
    {'color': 'Silver','horsepower': 300, 'price': 6000}
]

์œ„์˜ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ฆฌ์ŠคํŠธ๋Š” ํ•ญ์ƒ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— car_detail_list ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ƒํ•ญ ํ• ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„ ์งˆ์ˆ˜๋ก ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ ์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋ ‡๊ฒŒ ๋ฆฌ์ŠคํŠธ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•  ๋•Œ, ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๊ณ  ์‹ถ์œผ๋ฉด del ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฅผ ์ง€์›Œ์•ผ ํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” pop ์„ ํ•ด์„œ ์ด๋ฅผ ์ˆ˜์ •ํ•ด์„œ dict ํŒŒ์ผ์„ ์ง€์›Œ์•ผ ํ•œ๋‹ค.


ํด๋ž˜์Šค ๊ตฌ์กฐ

ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋”ฉ์„ ์ง„ํ–‰ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ , ์ฝ”๋“œ ๋ฐ˜๋ณต์„ ์ตœ์†Œํ™”, ๋ฉ”์†Œ๋“œ ํ™œ์šฉ์„ฑ์ด ์ฆ๊ฐ€ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ ๋‹จ์œ„ ์ผ ์ˆ˜๋ก ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ฝ”๋”ฉ์„ ๊ถŒ์žฅ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

# ํด๋ž˜์Šค ์„ ์–ธ
class Car():
    pass

class Car:
    pass

class Car(object):
    pass

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


๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž.

class Car():
    def __init__(self, company, details) -> None:
        self._company = company
        self._details = details

์œ„์™€ ๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“  ํ›„์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„, ์ด๋ฅผ print ๋กœ ํ˜ธ์ถœ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ ๋ฉ๋‹ˆ๋‹ค.

car1 = Car("Ferrari", {'color': 'white', 'horsepower': 400, 'price': 800})

print(car1)
<__main__.Car object at 0x10aafcd30>

์ธํŠธํ„ด์Šค๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์ด๊ณ , ์ด๋Š” ํŒŒ์ด์ฌ์˜ ๋งค์ง ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ถœ๋ ฅ๋ฌธ์„ ๋ฐ”๊ฟ” ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Car():
    def __init__(self, company, details) -> None:
        self._company = company
        self._details = details

    def __str__(self) -> str:
        return f'str : {self._company} - {self._details}'


์ถ”๊ฐ€๋กœ, __dict__ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

print(car1.__dict__)
# {'_company': 'Ferrari', '_details': {'color': 'white', 'horsepower': 400, 'price': 800}}

์ธ์Šคํ„ด์Šค์˜ ๋‚ด๋ถ€ ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋Š” __dict__ ์ด์ง€๋งŒ, ๋ฉ”ํƒ€ ์ •๋ณด ์ฆ‰, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋Š” dir ์ž…๋‹ˆ๋‹ค.

print(dir(car1))
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_company', '_details']

dir ๋กœ ์ฐ์–ด๋ณธ ๊ฒฐ๊ณผ๋ฌผ์„ ์‚ดํŽด ๋ณด๋ฉด ์ด๋ฏธ __str__ ๋ฉ”์†Œ๋“œ์™€ __repr__ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ์‚ดํŽด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋งค์ง ๋ฉ”์†Œ๋“œ๋Š” ํŒŒ์ด์ฌ์—์„œ ๋ฏธ๋ฆฌ ๊ตฌํ˜„์„ ํ•ด๋†“์•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์ • ํ•  ์ˆ˜ ์žˆ๊ฒ ๊ธˆ ๋งŒ๋“ค์–ด ๋†“์€ ๋ฉ”์†Œ๋“œ ์ž…๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด, dir ๋ฉ”์†Œ๋“œ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํ‘œ์‹œ ํ•ด์ค๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋ฉ”ํƒ€ ์ •๋ณด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๊ณ , __dict__ ๋Š” ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ํด๋ž˜์Šค์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ๋œ ๊ฒฐ๊ณผ๋งŒ์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

(ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ object ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์† ๋ฐ›์Œ)