4-1. Meta Class(1)

uoayopยท2021๋…„ 3์›” 27์ผ
0

Leaf์™€ Python

๋ชฉ๋ก ๋ณด๊ธฐ
15/21
post-thumbnail

3์ฃผ์ฐจ ๊ฐ•์˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ( + Descriptor ) ๋ฅผ ๋‹ค๋ฃจ์—ˆ๋‹ค. ์ •๋ง ๊ทน๊ฐ•์˜ ๋‚œ์ด๋„์˜€๋‹ค..
๊ฐ•์‚ฌ๋‹˜์˜ ๋ง์”€์„ ๋ถ„๋ช… ๋“ค์—ˆ๋Š”๋ฐ, ๊ทธ๋Œ€๋กœ ํ•œ์ชฝ ๊ท€๋กœ ๋น ์ ธ๋‚˜๊ฐ€์„œ ๋ช‡๋ฒˆ์„ ๋Œ๋ ค๋ดค๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๐Ÿคฏ

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

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

3์ฃผ์ฐจ ๊ฐ•์˜๋ฅผ ๋งˆ์นœ ๋‚˜์˜ ์ƒ๊ฐ๋„ ๊ฐ™๋‹ค!
๊ฐœ๋…๋งŒ ์ตํ˜”์„ ๋ฟ์ธ๋ฐ, ์ด์   ๋‹ค๋ฅธ ์˜คํ”ˆ ์†Œ์Šค์˜ ์ฝ”๋“œ๊ฐ€ ์กฐ๊ธˆ์€ ์ฝํžŒ๋‹ค.
๋งค์ง ๋ฉ”์†Œ๋“œ๋„ ๋” ์ด์ƒ ๋‘๋ ต์ง€ ์•Š๋‹ค ๐Ÿฅณ


Mata Class

  • ์˜ค๋Š˜์˜ ํ‚ค์›Œ๋“œ
    • Class of Class
    • type function
    • meta class
    • custom meta class

๋ฉ”ํƒ€ ํด๋ž˜์Šค ๋Œ€์ฒด ์™œ ์“ฐ๋Š”๊ฑฐ์ฃ ? ๐Ÿค”

1. ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๋‚ด๊ฐ€ ์˜๋„ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ปค์Šคํ…€(โญ๏ธ)ํ•˜๊ฒ ๋‹ค.
์ฆ‰, ๊ตฌํ˜„ ๋ ˆ๋ฒจ์— ๊ฐœ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

2. ํ”„๋ ˆ์ž„์›Œํฌ ์ž‘์„ฑ ์‹œ ํ•„์ˆ˜๋กœ ์•Œ์•„๋‘์–ด์•ผ ํ•œ๋‹ค.

Spring, Flux, MSA, tensorflow, pytorch, Django ๋“ฑ ๋งŽ์€ ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ
๋ฉ”ํƒ€ ํด๋ž˜์Šค๋กœ ์ ‘๊ทผํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ๋‹ค.
์ด๋Ÿฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ํ˜‘์—…ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ฐ˜๋“œ์‹œ ๋ฉ”ํƒ€ ํด๋ž˜์Šค๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.


๋ฉ”ํƒ€ ํด๋ž˜์Šค ์–ด๋””์— ์“ฐ๋Š”๊ฑฐ์ฃ ? ๐Ÿค”

1. ์ปค์Šคํ…€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ˜๋Ÿฌ๊ฐ€๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

2. ์—„๊ฒฉํ•œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ ์š”๊ตฌํ•  ๋•Œ ์“ฐ์ธ๋‹ค.

๋ผˆ๋Œ€๋ฅผ ๋ฉ”ํƒ€ ํด๋ž˜์Šค๋กœ ํƒ„ํƒ„ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋†“๊ณ , ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์“ฐ์ธ๋‹ค.
Django๋„ DB์™€ ํด๋ž˜์Šค๋ฅผ 1:1๋กœ ๋งคํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—„๊ฒฉํ•˜๋‹ค.


๋ฉ”ํƒ€ ํด๋ž˜์Šค ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”๋ฐ์š”? ๐Ÿค”

type ํ•จ์ˆ˜๊ฐ€ ๋™์  ์ƒ์„ฑ๊ณผ ์ปค์Šคํ…€ ํด๋ž˜์Šค ์ƒ์„ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

type

ํŠน์ • ์ธ์Šคํ„ด์Šค์˜ ์ž๋ฃŒํ˜•์„ ์ถœ๋ ฅํ•จ๊ณผ ๋”๋ถˆ์–ด, ๋ฉ”ํƒ€ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

class SamlpleA(): 
    pass

obj1 = SamlpleA() 

print('ex 1>',obj1.__class__)
#  <class '__main__.SamlpleA'> 
# obj1์˜ ์›ํ˜•์€ sampleA๋ผ๊ณ  ์•Œ๋ ค์ค€๋‹ค.

print('ex 1>',type(obj1))
# obj1์˜ ํƒ€์ž… ๋˜ํ•œ  '<class __main__.SamlpleA'> ์ด๋‹ค.

type์˜ ์—ญํ• 

type ๐Ÿ’ฌ "๋„ˆ ์–ด๋””์—์„œ ๋งŒ๋“ค์–ด์กŒ์–ด?"

  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์–ด๋””์—์„œ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

class SampleA๋กœ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค obj1์˜ type์€ '<class __main__.SamlpleA'> ์ด๋‹ค.

โญ๏ธ ๊ทธ๋ ‡๋‹ค๋ฉด class SampleA๋Š” ๋ˆ„๊ตฌ๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„๊ฑธ๊นŒ?

obj1.__class__ ๋Š” SampleA ์ด๋ฏ€๋กœ,
obj1.__class__.__class__ ๋กœ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

print('ex 1>',obj1.__class__.__class__)
# <class 'type'>

๋ ์šฉ? ๋œฌ๊ธˆ์—†์ด type์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

์‚ฌ์‹ค ํŒŒ์ด์ฌ์—์„œ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€ ํด๋ž˜์Šค๋Š” type์ด๋‹ค.
type์ด ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์›ํ˜• ์ธ ๊ฒƒ์ด๋‹ค. ๐Ÿ˜ฎ

type์˜ type

โญ๏ธ ๊ทธ๋ ‡๋‹ค๋ฉด type์€ ๋ˆ„๊ตฌ๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์กŒ์„๊นŒ?

print('ex 1>',obj1.__class__.__class__)
# ex 1> <class 'type'>

print('ex 1>',type(obj1).__class__)
# ex 1> <class 'type'>

print('ex 1>',type.__class__)
# ex 1> <class 'type'>

๋†€๋ž๊ฒŒ๋„ type์€ ์ž๊ธฐ ์ž์‹ ์ด ๋ฉ”ํƒ€๋‹ค.
์ด๋ฏธ ํŒŒ์ด์ฌ ์–ธ์–ด ์ž์ฒด์— ์ •์˜๋œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, type์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋Š” ๊ฐœ์ž…ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค!
๊ทธ๋ ‡์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋ฉ”ํƒ€ ํด๋ž˜์Šค๋Š” ์–ธ์ œ๋“  ๊ฐœ์ž… ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋‚ด ์ž…๋ง›๋Œ€๋กœ ์ปค์Šคํ…€ ํ•ด๋ณด์ž~!


ํ•ต์‹ฌ ์ •๋ฆฌ โญ๏ธ

obj1 = SampleA's instance
SampleA = type meta class
type = type meta class

  • ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€๋Š” type์ด๋‹ค.
  • type์€ ์ž๊ธฐ์ž์‹ ์ด ๋ฉ”ํƒ€์ด๋‹ค.
    ๊ทธ๋ž˜์„œ type์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋Š” ๊ฐœ์ž…ํ•  ์ˆ˜ ์—†๋‹ค.

[์ถœ์ฒ˜]

์ธํ”„๋Ÿฐ - ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ํŒŒ์ด์ฌ : ํ•„์ˆ˜ ๋ฌธ๋ฒ• ๋ฐฐ์šฐ๊ธฐ Feat. ์˜คํ”ˆ์†Œ์Šค ํŒจํ‚ค์ง€ ๋ฐฐํฌ (Inflearn Original)

profile
slow and steady wins the race ๐Ÿข

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