파이썬 클래스에 대해 각 요소들에 대해 상세히 설명하겠습니다.
1. 클래스와 객체:
- 클래스는 객체를 생성하기 위한 틀 또는 설계도입니다. 객체는 클래스를 기반으로 실제로 생성된 인스턴스입니다. 클래스는 객체의 속성(변수)과 동작(메서드)을 정의하며, 객체는 이러한 속성과 동작을 가지고 있습니다.
| class Dog: |
| |
| species = 'mammal' |
| |
| |
| def __init__(self, name, age): |
| |
| self.name = name |
| self.age = age |
| |
| |
| def bark(self): |
| return "Woof!" |
2. 클래스 구조:
클래스는 다음과 같은 요소들로 구성됩니다.
- 클래스 변수: 클래스 내에서 공유되는 변수로, 모든 객체가 동일한 값을 가집니다.
- 생성자(__init__ 메서드): 객체를 생성하고 초기화하는 역할을 수행합니다. 인스턴스 변수를 초기화합니다.
- 인스턴스 변수: 객체(인스턴스)마다 독립적으로 가지고 있는 변수로, 객체의 속성을 나타냅니다.
- 메서드: 클래스 내에서 정의된 함수로, 객체의 동작을 정의합니다.
3. 클래스 연산:
- 클래스는 객체를 생성하고, 객체의 속성과 동작을 정의하여 객체들이 원하는 동작을 수행하도록 합니다.
| |
| dog1 = Dog("Buddy", 3) |
| dog2 = Dog("Daisy", 2) |
| |
| |
| print(dog1.name) |
| print(dog2.age) |
| |
| |
| print(dog1.bark()) |
4. 생성자 (__init__ 메서드):
- 생성자는 객체를 생성하고 초기화하는 메서드로, 클래스가 인스턴스화될 때 자동으로 호출됩니다. 인스턴스 변수를 초기화하는 역할을 수행합니다.
| class Student: |
| def __init__(self, name, age, major): |
| self.name = name |
| self.age = age |
| self.major = major |
| |
| |
| student1 = Student("Alice", 25, "Computer Science") |
| student2 = Student("Bob", 22, "Mathematics") |
5. 상속:
- 상속은 기존 클래스를 기반으로 새로운 클래스를 만드는 기능입니다. 상속을 받은 클래스는 기존 클래스의 속성과 동작을 모두 물려받습니다.
| class Animal: |
| def __init__(self, species): |
| self.species = species |
| |
| def make_sound(self): |
| pass |
| |
| class Dog(Animal): |
| def make_sound(self): |
| return "Woof!" |
| |
| class Cat(Animal): |
| def make_sound(self): |
| return "Meow!" |
| |
| dog = Dog("Mammal") |
| cat = Cat("Mammal") |
| print(dog.make_sound()) |
| print(cat.make_sound()) |
6. 클래스 변수와 인스턴스 변수:
- 클래스 변수는 클래스 자체에 속하며, 모든 객체가 공유합니다. 인스턴스 변수는 객체마다 독립적으로 속하며, 객체의 속성을 나타냅니다.
| class Counter: |
| count = 0 |
| |
| def __init__(self): |
| Counter.count += 1 |
| |
| def get_count(self): |
| return Counter.count |
| |
| c1 = Counter() |
| c2 = Counter() |
| |
| print(c1.get_count()) |
| print(c2.get_count()) |
파이썬 클래스를 잘 이해하고 활용하면 객체 지향 프로그래밍의 장점을 최대한 활용할 수 있습니다. 상속을 통해 코드 재사용을 높이고, 클래스 변수와 인스턴스 변수를 적절히 사용하여 객체들이 원하는 동작을 수행하도록 설계하는 것이 좋습니다.