λ°˜μ‘ν˜•
d = Dog("Buddy")
d.bark()  # Output: Buddy says woof!

1. 클래슀의 μ •μ˜

ν΄λž˜μŠ€λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이기 μœ„ν•œ ꡬ쑰이닀. ν΄λž˜μŠ€λŠ” νŠΉμ • κΈ°λŠ₯을 가진 데이터와 ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜λ©°, μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜λŠ” ν‹€λ‘œ ν™œμš©λœλ‹€. Pythonμ—μ„œ ν΄λž˜μŠ€λŠ” class ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ μ •μ˜ν•  수 μžˆλ‹€.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"Hello, {self.name}!")

Person ν΄λž˜μŠ€λŠ” 이름과 λ‚˜μ΄λ₯Ό μ†μ„±μœΌλ‘œ 가지며, greet λ©”μ„œλ“œλ₯Ό 톡해 인사말을 좜λ ₯ν•  수 μžˆλ‹€. κ°μ²΄λŠ” 클래슀λ₯Ό 기반으둜 μƒμ„±λ˜λ©°, 이λ₯Ό 톡해 클래슀λ₯Ό ν˜ΈμΆœν•˜μ—¬ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

* selfλŠ” Pythonμ—μ„œ 클래슀 μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ μ°Έμ‘°ν•˜κΈ° μœ„ν•œ νŠΉλ³„ν•œ λ³€μˆ˜λ‹€. 클래슀의 λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  λ•Œ 항상 첫 번째 λ§€κ°œλ³€μˆ˜λ‘œ selfλ₯Ό 적어야 ν•˜λ©°, 이λ₯Ό 톡해 ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œμ— μ ‘κ·Όν•  수 μžˆλ‹€. JavaScriptμ—μ„œλŠ” 일반적으둜 thisλ₯Ό 톡해 객체 λ‚΄λΆ€μ˜ ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•˜λŠ”λ°, Pythonμ—μ„œλŠ” selfλ₯Ό λͺ…μ‹œμ μœΌλ‘œ 전달해야 ν•œλ‹€.

p = Person("Cheolsu", 20)
p.greet()  # Output: Hello, Cheolsu!

2. __init__ λ©”μ„œλ“œ (Initializer)

__init__ λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€λ‘œλΆ€ν„° μƒμ„±λœ 객체의 μ΄ˆκΈ°κ°’μ„ μ„€μ •ν•˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œμ΄λ‹€. 객체 생성 μ‹œ μžλ™μœΌλ‘œ 호좜되며, 속성을 μ΄ˆκΈ°ν™”ν•œλ‹€. μ—¬κΈ°μ„œ 첫 번째 λ§€κ°œλ³€μˆ˜ selfλŠ” ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ₯Ό λ‚˜νƒ€λ‚΄λ©°, Python 클래슀 λ©”μ„œλ“œμ—μ„œ 항상 첫 번째 λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©λœλ‹€.

class Animal:
    def __init__(self, species, sound):
        self.species = species
        self.sound = sound

    def make_sound(self):
        print(f"{self.species} makes {self.sound}")
a = Animal("Cat", "meow")
a.make_sound()  # Output: Cat makes meow

3. 클래슀 속성과 μΈμŠ€ν„΄μŠ€ 속성

클래슀 속성은 클래슀 μžμ²΄μ— μ†ν•˜λŠ” 반면, μΈμŠ€ν„΄μŠ€ 속성은 νŠΉμ • μΈμŠ€ν„΄μŠ€μ— μ†ν•œλ‹€. 클래슀 속성은 λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ—μ„œ 곡유되며, 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  클래슀λͺ…μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλ‹€.

class Car:
    wheels = 4  # 클래슀 속성

    def __init__(self, color):
        self.color = color  # μΈμŠ€ν„΄μŠ€ 속성
print(Car.wheels)  # Output: 4
car1 = Car("Red")
print(car1.color)  # Output: Red

4. λ©”μ„œλ“œ(Method)

클래슀 λ‚΄λΆ€μ—μ„œ μ •μ˜λœ ν•¨μˆ˜λŠ” λ©”μ„œλ“œλΌ 뢈리며, 객체의 λ™μž‘μ„ μ •μ˜ν•œλ‹€. λ©”μ„œλ“œλŠ” 객체λ₯Ό 톡해 호좜되며, λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μΈμŠ€ν„΄μŠ€ 속성에 μ ‘κ·Όν•  수 μžˆλ‹€.

class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print(f"{self.name} says woof!")

5. 상속(Inheritance)

상속은 κΈ°μ‘΄ 클래슀λ₯Ό ν™•μž₯ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀λ₯Ό λ§Œλ“œλŠ” 방법이닀. 상속을 톡해 μ½”λ“œ 쀑볡을 쀄일 수 있으며, μƒμœ„ 클래슀의 속성과 λ©”μ„œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›λŠ”λ‹€.

class Animal:
    def __init__(self, species):
        self.species = species

    def speak(self):
        return "Sound"

class Dog(Animal):
    def speak(self):
        return "Bark"
d = Dog("Dog")
print(d.speak())  # Output: Bark

6. super() ν•¨μˆ˜

ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μƒμœ„ 클래슀의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ super() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. 이λ₯Ό 톡해 μƒμœ„ 클래슀의 κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆλ‹€.

class Bird(Animal):
    def __init__(self, species, can_fly):
        super().__init__(species)
        self.can_fly = can_fly        

7. 맀직 λ©”μ„œλ“œ (Magic Method)

맀직 λ©”μ„œλ“œλŠ” νŠΉλ³„ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œλ‘œ, 두 μ–Έλ”μŠ€μ½”μ–΄(__)둜 μ‹œμž‘ν•˜κ³  λλ‚˜λŠ” λ©”μ„œλ“œλ‹€. 예λ₯Ό λ“€μ–΄, __str__은 객체λ₯Ό λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•  λ•Œ μ‚¬μš©λ˜λ©°, __len__은 객체의 길이λ₯Ό λ°˜ν™˜ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

class Book:
    def __init__(self, title, pages):
        self.title = title
        self.pages = pages

    def __str__(self):
        return f"{self.title} ({self.pages} pages)"
b = Book("Python Basics", 250)
print(b)  # Output: Python Basics (250 pages)

8. ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ

클래슀 λ©”μ„œλ“œλŠ” @classmethod λ°μ½”λ ˆμ΄ν„°λ‘œ μ •μ˜ν•˜λ©°, 클래슀 μžμ²΄μ— λŒ€ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€. 반면, μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” νŠΉμ • μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.

class MyClass:
    @classmethod
    def class_method(cls):
        print("Class method called")

9. 정적 λ©”μ„œλ“œ (Static Method)

정적 λ©”μ„œλ“œλŠ” νŠΉμ • μΈμŠ€ν„΄μŠ€λ‚˜ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ΄λ‹€. @staticmethod λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•΄ μ •μ˜ν•˜λ©°, λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό 클래슀 내뢀에 μ •μ˜ν•  수 μžˆλ‹€.

class Math:
    @staticmethod
    def add(a, b):
        return a + b
print(Math.add(3, 5))  # Output: 8

10. 객체지ν–₯의 νŠΉμ§•: μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„±

  • μΊ‘μŠν™”λŠ” 객체의 μ„ΈλΆ€ κ΅¬ν˜„μ„ 감좔고, μ™ΈλΆ€μ—λŠ” μΈν„°νŽ˜μ΄μŠ€λ§Œ μ œκ³΅ν•˜λŠ” 방식이닀. 이λ₯Ό 톡해 μ™ΈλΆ€μ—μ„œλŠ” 객체 λ‚΄λΆ€μ˜ λ³΅μž‘ν•œ λ‘œμ§μ„ μ•Œ ν•„μš” 없이 ν•„μš”ν•œ μ •λ³΄μ—λ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.
  • 상속은 κΈ°μ‘΄ 클래슀의 속성과 λ©”μ„œλ“œλ₯Ό μƒˆλ‘œμš΄ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›μ•„ μž¬μ‚¬μš©ν•  수 있게 ν•œλ‹€. μ½”λ“œμ˜ 쀑볡을 쀄이고 μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•œλ‹€.
  • λ‹€ν˜•μ„±μ€ λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ λ™μž‘μ„ μˆ˜ν–‰ν•  수 있게 ν•˜λŠ” νŠΉμ§•μ΄λ‹€. 예λ₯Ό λ“€μ–΄, μ—¬λŸ¬ ν΄λž˜μŠ€κ°€ 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό 가지고 μžˆμ–΄λ„ 각 클래슀의 λ™μž‘μ— 맞게 μ‚¬μš©ν•  수 μžˆλ‹€.
λ°˜μ‘ν˜•

+ Recent posts