λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ
🀷🏼‍♀️ Etc.../- C, C++, Python, Android

[Python κ³ κΈ‰] 객체와 클래슀 (5) μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ vs 정적 λ©”μ„œλ“œ vs 클래슀 λ©”μ„œλ“œ (Instance Method, Static Method, Class Method)

by Wonit 2020. 5. 10.

νŒŒμ΄μ¬μ—λŠ” λ‹€λ₯Έ 언어와 λ§ˆμ°¬κ°€μ§€λ‘œ λ©”μ„œλ“œλΌλŠ” μ˜μ—­μ΄ μ‘΄μž¬ν•œλ‹€. 이제 κ·Έ λ©”μ„œλ“œμ˜ λΆ„λ₯˜μ™€ μ‚¬μš©λ²•μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

  1. Instance Method
  2. Static Method
  3. Class Method

 

Instance Method

μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” 각 κ°μ²΄μ—μ„œ κ°œλ³„μ μœΌλ‘œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€.

 

예둜 μžλ™μ°¨λΌλŠ” ν΄λž˜μŠ€κ°€ μžˆμ„λ•Œ κΈ°λ³Έ ꡬ동 λ©”μ»€λ‹ˆμ¦˜μ€ λͺ¨λ‘ λ™μΌν•˜μ§€λ§Œ 속도, 이름, 색은 λͺ¨λ‘ κ³ μœ ν•œ λ™μž‘κ³Ό μƒνƒœκ°€ μžˆλ‹€.

 

이런 κ²½μš°μ— κ³ μœ ν•œ λ™μž‘κ³Ό μƒνƒœλ₯Ό Instance Methodλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜ν•œλ‹€.

self

μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ 첫 μΈμžλŠ” 무쑰건 self ν‚€μ›Œλ“œκ°€ ν•„μš”ν•œλ°, 이 λœ»μ€ 클래슀의 μΈμŠ€ν„΄μŠ€(객채)λ₯Ό λœ»ν•˜λ―€λ‘œ selfλ₯Ό ν†΅ν•΄μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό λ§Œλ“€κ³  μ‚¬μš©ν•œλ‹€.

 

μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ˜ ꡬ쑰

class 클래슀λͺ…():
    def ν•¨μˆ˜λͺ…(self, 인자1, 인자2, ...):
        self.λ³€μˆ˜λͺ…1 = 인자1
        self.λ³€μˆ˜λͺ…2 = 인자2
        ...
        <μ½”λ“œ>

 

μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ˜ μ‚¬μš©λ²•

객채λͺ… = 클래슀λͺ…()
객체λͺ….λ©”μ„œλ“œλͺ…(인자1, 인자2, ...)

 

instance λ©”μ„œλ“œ

 

μœ„μ˜ 예제λ₯Ό λ³΄μ•˜λ“―μ΄ car1의 객체(μΈμŠ€ν„΄μŠ€)와 car2의 객체(μΈμŠ€ν„΄μŠ€)λŠ” μ„œλ‘œ λ…λ¦½μ μœΌλ‘œ μ›€μ§μ΄κ²Œ λœλ‹€.

 

Static Method

 

정적 λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ™€ 달리 클래슀, μΈμŠ€ν„΄μŠ€μ™€λŠ” λ¬΄κ΄€ν•˜κ²Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.


μ΄λŸ¬ν•œ Static Methodμ—λŠ” μ—¬λŸ¬ νŠΉμ§•μ΄ μžˆλŠ”λ°,

 

  • ν•¨μˆ˜ μ •μ˜μ‹œ 인자둜 selfλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • Static Method λ‚΄λΆ€μ—μ„œλŠ” Inatance Method, variable에 μ ‘κ·Όν•  수 μ—†λ‹€.
  • ν•¨μˆ˜ μ•žμ— λ°μ½”λ ˆμ΄ν„°μΈ @staticmethodλ₯Ό μ§€μ •ν•΄μ€˜μ•Ό ν•œλ‹€.

 

정적 λ©”μ„œλ“œμ˜ ꡬ쑰

class 클래슀λͺ…():
    @staticmethod
    def ν•¨μˆ˜λͺ…(인자1, 인자2, ...):
        <μ½”λ“œ>

 

정적 λ©”μ„œλ“œμ˜ μ‚¬μš©λ²•.

클래슀λͺ….λ©”μ„œλ“œλͺ…(인자1, 인자2, ...)

 

static λ©”μ„œλ“œ

 

μœ„μ˜ κ·Έλ¦Όμ—μ„œ 보듯이 self 인자 없이 일반 ν•¨μˆ˜μ²˜λŸΌ ν•„μš”ν•œ 인자만 μ‚¬μš©ν•œλ‹€.

 

Class Method

클래슀 λ©”μ„œλ“œλŠ” 클래슀 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ ν•¨μˆ˜μ΄λ‹€.


클래슀 λ³€μˆ˜μ˜ νŠΉμ§•μ— λŒ€ν•΄ λ§ν•˜μžλ©΄

 

  • ν•¨μˆ˜μ˜ 첫 번째 μΈμžλŠ” cls 이어야 ν•œλ‹€.
  • 클래슀 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°μ½”λ ˆμ΄ν„°μΈ @classmethodλ₯Ό 지정해야 ν•œλ‹€.

 

클래슀 λ©”μ„œλ“œμ˜ ꡬ쑰

class 클래슀λͺ…():
    @classmethod
    def ν•¨μˆ˜λͺ…(cls, 인자1, 인자2, ...):
        <μ½”λ“œ>

 

클래슀 λ©”μ„œλ“œμ˜ μ‚¬μš©λ²•.

클래슀λͺ….λ©”μ„œλ“œλͺ…(인자1, 인자2, ...)

 

class λ©”μ„œλ“œ

 

λŒ“κΈ€