__init__

μƒ€μ›Œμ‹€μ˜ 바보·2025λ…„ 2μ›” 5일
0

Python

λͺ©λ‘ 보기
5/10

πŸ”Ž Python ν΄λž˜μŠ€μ—μ„œ init()을 μƒλž΅ν•˜λŠ” 경우

init()은 Pythonμ—μ„œ 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œ(μƒμ„±μž)μž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ init()을 μ •μ˜ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

μ•„λž˜μ™€ 같은 경우 init()을 μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ… 1️⃣ init()이 ν•„μš” μ—†λŠ” 경우

➊ ν΄λž˜μŠ€κ°€ νŠΉλ³„ν•œ μ΄ˆκΈ°ν™” 없이 λ™μž‘ν•  경우

init()을 μƒλž΅ν•˜λ©΄ Python은 기본적으둜 빈 μƒμ„±μž(κΈ°λ³Έ μƒμ„±μž)λ₯Ό μžλ™μœΌλ‘œ μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“Œ 예제: init() 없이 κ°„λ‹¨ν•œ 클래슀

class HelloWorld:
    def greet(self):
        return "Hello, World!"

# 객체 생성
hw = HelloWorld()
print(hw.greet())  # Hello, World!

βœ… init()을 μ •μ˜ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ, HelloWorld() 객체λ₯Ό μ •μƒμ μœΌλ‘œ 생성할 수 있음.

βž‹ 클래슀 내뢀에 μƒνƒœ(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜)λ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ” 경우

객체가 속성(self.attribute)을 κ°€μ§ˆ ν•„μš” 없이, λ‹¨μˆœν•œ λ©”μ„œλ“œλ§Œ μ œκ³΅ν•˜λŠ” 경우 init()이 λΆˆν•„μš”ν•©λ‹ˆλ‹€.

πŸ“Œ 예제: μƒνƒœκ°€ μ—†λŠ” 클래슀

class MathOperations:
    @staticmethod
    def add(a, b):
        return a + b

# 객체 생성
math_ops = MathOperations()
print(math_ops.add(3, 5))  # 8

βœ… 이 ν΄λž˜μŠ€λŠ” μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ init() 없이도 정상 μž‘λ™ν•¨.

➌ 클래슀λ₯Ό λ‹¨μˆœν•œ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ μ‚¬μš©ν•  경우

ν΄λž˜μŠ€κ°€ λ‹¨μˆœνžˆ κ΄€λ ¨ ν•¨μˆ˜μ™€ μƒμˆ˜λ₯Ό κ·Έλ£Ήν™”ν•˜λŠ” μ—­ν• λ§Œ ν•œλ‹€λ©΄ init()이 ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

πŸ“Œ 예제: μƒμˆ˜λ₯Ό ν¬ν•¨ν•œ μœ ν‹Έλ¦¬ν‹° 클래슀

class Constants:
    PI = 3.14159
    GRAVITY = 9.8

print(Constants.PI)  # 3.14159
print(Constants.GRAVITY)  # 9.8

βœ… Constants ν΄λž˜μŠ€λŠ” λ‹¨μˆœνžˆ μƒμˆ˜λ₯Ό μ €μž₯ν•˜λŠ” μ—­ν• λ§Œ ν•˜λ―€λ‘œ init()이 ν•„μš” μ—†μŒ.

βœ… 2️⃣ init()을 μƒλž΅ν•  수 μžˆμ§€λ§Œ, μ‚¬μš©ν•˜λ©΄ 더 쒋은 경우

➍ ν΄λž˜μŠ€μ— 정적 λ©”μ„œλ“œ(@staticmethod)λ‚˜ 클래슀 λ©”μ„œλ“œ(@classmethod)만 포함할 경우

클래슀 내뢀에 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , 클래슀 μžμ²΄μ—μ„œ 곡용으둜 μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œλ§Œ 포함할 경우 init()을 μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ 예제: 정적 λ©”μ„œλ“œλ§Œ μžˆλŠ” 클래슀

class Utility:
    @staticmethod
    def greet(name):
        return f"Hello, {name}!"

# 객체 없이 λ©”μ„œλ“œ 호좜 κ°€λŠ₯
print(Utility.greet("Alice"))  # Hello, Alice!

βœ… 이 ν΄λž˜μŠ€λŠ” 객체λ₯Ό 생성할 ν•„μš” 없이 Utility.greet()λ₯Ό 직접 ν˜ΈμΆœν•  수 있음.

❌ 3️⃣ init()을 μƒλž΅ν•˜λ©΄ μ•ˆ λ˜λŠ” 경우

λ‹€μŒκ³Ό 같은 κ²½μš°μ—λŠ” init()이 ν•„μš”ν•©λ‹ˆλ‹€.

➊ ν΄λž˜μŠ€κ°€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•˜λŠ” 경우

class Person:
    def __init__(self, name, age):  # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” μƒμ„±μž
        self.name = name
        self.age = age

    def introduce(self):
        return f"My name is {self.name}, and I'm {self.age} years old."

p = Person("Alice", 25)
print(p.introduce())

βœ… self.nameκ³Ό self.ageλ₯Ό μ €μž₯ν•΄μ•Ό ν•˜λ―€λ‘œ init()이 ν•„μš”ν•¨.

🎯 결둠

상황init() μƒλž΅ κ°€λŠ₯ μ—¬λΆ€μ„€λͺ…
λ©”μ„œλ“œλ§Œ ν¬ν•¨λœ ν΄λž˜μŠ€βœ… κ°€λŠ₯μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ ν•„μš” 없을 λ•Œ
μƒμˆ˜λ§Œ μ €μž₯ν•˜λŠ” ν΄λž˜μŠ€βœ… κ°€λŠ₯λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ—­ν• λ§Œ ν•  λ•Œ
정적 λ©”μ„œλ“œλ§Œ μžˆλŠ” ν΄λž˜μŠ€βœ… κ°€λŠ₯@staticmethodλ₯Ό μ‚¬μš©ν•  λ•Œ
μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•˜λŠ” 경우❌ λΆˆκ°€λŠ₯객체별 μƒνƒœλ₯Ό μ €μž₯ν•΄μ•Ό ν•  λ•Œ

λ”°λΌμ„œ, ν΄λž˜μŠ€κ°€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 없이 λ‹¨μˆœν•œ κΈ°λŠ₯ 제곡만 ν•˜λ©΄ init()을 μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€! πŸš€

profile
κ³΅λΆ€ν•˜λŠ” 개발자

0개의 λŒ“κΈ€