객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체라는 단위로 구성하여,
코드의 재사용성과 유지보수성을 높이는 프로그래밍 방식입니다.
파이썬은 강력한 객체지향 기능을 제공하며, 클래스와 객체라는 개념을 통해 코드를 구성할 수 있습니다.
이번 글에서는 파이썬의 클래스와 객체에 대한 기초 개념과 정의 및 활용법을 예제와 함께 알아보겠습니다.
1. 클래스와 객체란?
클래스(Class)는 객체를 생성하기 위한 설계도와 같은 역할을 합니다. 클래스는 속성과 메서드를 정의하여, 해당 클래스를 기반으로 여러 개의 객체를 만들 수 있습니다.
객체(Object)는 클래스를 통해 생성된 실체로, 클래스에서 정의한 속성과 메서드를 가진 독립적인 개체입니다.
2. 클래스 정의하기
파이썬에서 클래스는 class
키워드를 사용하여 정의하며, 클래스 이름은 보통 첫 글자를 대문자로 작성합니다.
기본 클래스 구조
class 클래스이름:
클래스의 속성 및 메서드 정의
예제 1: 간단한 클래스 정의하기
아래 예제는 Person
이라는 클래스를 정의하고, 이름과 나이를 속성으로 갖는 예제입니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
이 예제에서 __init__
메서드는 객체가 생성될 때 호출되는 초기화 메서드로, 객체의 기본 속성을 설정합니다.
3. 객체 생성하기
클래스를 정의한 후에는 클래스를 사용해 객체를 생성할 수 있습니다. 객체는 클래스 이름에 괄호를 붙여 생성하며, 생성 시 __init__
메서드에 정의된 매개변수를 전달해야 합니다.
예제 2: 객체 생성 및 속성 접근
person1 = Person("Alice", 25)
print(person1.name) # Alice
print(person1.age) # 25
위 코드에서 person1
이라는 객체를 생성하고, name
과 age
속성에 접근하여 값을 출력합니다.
4. 메서드 정의하기
메서드는 클래스 내부에 정의된 함수로, 객체의 동작을 정의합니다. 메서드는 객체의 상태(속성)를 변경하거나 특정 기능을 수행합니다.
예제 3: 메서드 추가하기
아래 예제는 Person
클래스에 greet
라는 메서드를 추가하여 인사말을 출력합니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I'm {self.age} years old.")
person1 = Person("Alice", 25)
person1.greet() # Hello, my name is Alice and I'm 25 years old.
위 예제에서 greet
메서드는 객체의 name
과 age
속성을 사용해 인사말을 출력합니다.
5. 클래스 변수와 인스턴스 변수
클래스에는 클래스 변수와 인스턴스 변수라는 두 종류의 변수가 있습니다.
- 클래스 변수: 모든 객체가 공유하는 변수로, 클래스 선언 내부에 정의합니다.
- 인스턴스 변수: 각 객체가 독립적으로 가지는 변수로,
__init__
메서드 내에서self
를 사용해 정의합니다.
예제 4: 클래스 변수와 인스턴스 변수
class Person:
species = "Homo sapiens" # 클래스 변수
def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age # 인스턴스 변수
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)
print(person1.species) # Homo sapiens
print(person2.species) # Homo sapiens
위 예제에서 species
는 모든 객체가 공유하는 클래스 변수이며, name
과 age
는 각 객체가 고유하게 가지는 인스턴스 변수입니다.
6. 상속 (Inheritance)
상속은 기존 클래스의 속성과 메서드를 상속받아 새로운 클래스를 생성하는 기능입니다. 상속을 통해 코드 재사용성을 높이고, 기존 기능을 확장할 수 있습니다.
예제 5: 클래스 상속
아래 예제는 Student
클래스가 Person
클래스를 상속받아 grade
속성을 추가하는 코드입니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class Student(Person): # Person 클래스를 상속
def __init__(self, name, age, grade):
super().__init__(name, age) # 부모 클래스 초기화
self.grade = grade
student1 = Student("Alice", 20, "A")
print(student1.name) # Alice
print(student1.grade) # A
위 코드에서 Student
클래스는 Person
클래스를 상속받아 name
과 age
속성 외에 grade
속성을 추가로 가집니다.
7. 메서드 오버라이딩
메서드 오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 기능입니다. 이를 통해 자식 클래스에서 부모 클래스와 다른 동작을 구현할 수 있습니다.
예제 6: 메서드 오버라이딩
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name}.")
class Student(Person):
def greet(self):
print(f"Hi, I'm {self.name}, and I'm a student.")
person1 = Person("Alice", 25)
student1 = Student("Bob", 20)
person1.greet() # Hello, my name is Alice.
student1.greet() # Hi, I'm Bob, and I'm a student.
위 코드에서 Student
클래스의 greet
메서드는 Person
클래스의 greet
메서드를 오버라이딩하여 다른 메시지를 출력합니다.
마무리
이번 글에서는 파이썬 객체지향 프로그래밍의 기본 개념인 클래스와 객체에 대해 알아보았습니다.
객체지향 프로그래밍을 통해 코드의 재사용성과 확장성을 높일 수 있습니다.
파이썬에서 클래스를 정의하고, 객체를 생성하며, 상속과 메서드 오버라이딩을 활용해보세요.