안녕하세요!
오늘은 파이썬의 중요한 개념인 클래스와 객체 지향 프로그래밍에 대하여 글을 써볼까 합니다.
들어가기 앞서서..
- 객체 지향 프로그래밍이란?
객체 지향 프로그래밍이란 소프트웨어를 구조화하고 모듈화 하는 강력한 방법론 중 하나입니다.
- 클래스란?
클래스란 객체 지향 프로그래밍의 핵심 개념으로, 데이터와 메서드를 하나의 단위로 묶어서 코드를 보다 유지보수 가능하고 재사용성이 높은 형태로 구성할 수 있게 해줍니다.
1. 클래스와 객체의 개념
클래스는 속성과 행위를 정의한 것이고 객체는 클래스의 인스턴스입니다. 예제를 통해 알아보도록 하겠습니다!
# 클래스 정의
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
return "Woof!"
# 객체 생성
dog1 = Dog("Buddy", 3)
dog2 = Dog("Max", 5)
# 객체 사용
print(dog1.name) # 출력: Buddy
print(dog1.age) # 출력: 3
print(dog1.bark()) # 출력: Woof!
print(dog2.name) # 출력: Max
print(dog2.age) # 출력: 5
print(dog2.bark()) # 출력: Woof!
위 예제에서 Dog 클래스는 개를 나타내는 간단한 설계도입니다. ' __init__ ' 메서드를 사용하여 name과 age라는 인스턴스 변수를 초기화하고, bark 메서드를 정의했습니다.
그리고 이 클래스를 바탕으로 dog1과 dog2라는 두 개의 객체를 생성했습니다. 이 객체들은 Dog 클래스의 인스턴스이며, 각각 name과 age라는 인스턴스 변수를 가지고 있습니다. 이렇게 클래스를 기반으로 생성된 객체들은 서로 다른 데이터를 가질 수 있습니다.
dog1.name과 dog2.name은 각 객체의 name 속성을 의미하며, dog1.age와 dog2.age는 각 객체의 age 속성을 의미합니다. 객체는 클래스의 멤버 변수에 저장된 데이터에 접근할 수 있습니다.
또한, dog1.bark()와 dog2.bark()는 Dog 클래스의 bark 메서드를 호출합니다. 이 메서드는 "Woof!"를 반환하므로, 각 객체에서 bark() 메서드를 호출할 때 같은 결과를 얻을 수 있습니다.
이러한 예제를 통해 클래스는 객체를 생성하기 위한 설계도로서, 객체는 클래스의 인스턴스로 실제로 동작하는 개체라는 차이를 이해할 수 있습니다. 클래스는 추상적인 개념이며, 객체는 이를 구체화한 실체라고 할 수 있습니다.
2. 클래스 정의하기
파이썬에서 클래스는 ' class ' 키워드를 사용하여 정의합니다. 클래스의 명명규칙은 관례적으로 ' CamelCase ' 를 사용합니다. 클래스는 멤버 변수(속성)와 멤버 함수(메서)로 구성됩니다.
class MyClass:
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def my_method(self):
# 클래스의 메서드 내용을 작성합니다.
pass
3. 클래스에서 생성자와 인스턴스 변수 차이
1) 생성자(Constructor)
- 생성자는 클래스로부터 객체(인스턴스)가 생성될 때 호출되는 특별한 메서드입니다.
- 파이썬에서 생성자 메서드는 ' __init__ ' 이라는 이름으로 정의됩니다.
- 객체의 초기 상태를 설정하는 역할을 수행합니다.
- 생성자는 ' self ' 라는 첫 번째 매개변수를 갖는데 이를 통해 생성되는 인스턴스 객체에
접근하여 인스턴스 변수를 초기화 하거나 다른 작업을 수행할 수 있습니다.
class MyClass:
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
2) 인스턴스 변수(Instance Variavles)
- 인스턴스 변수는 클래스의 각 인스턴스(객체)에 속하는 변수로, 객체마다 독립적으로 존재합니다
- 클래스 내에서 ' self ' 를 사용하여 인스턴스 변수를 정의하고, 생성자에서 초기화 할 수 있습니다.
- 각 객체는 자신만의 인스턴스 변수를 갖기 때문에, 서로 다른 객체는 동일한 클래스에 속해있지만 각자 다른 데이터를 가질 수 있습니다.
class MyClass:
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
# 인스턴스 생성
obj1 = MyClass("Hello", 10)
obj2 = MyClass("World", 20)
print(obj1.arg1) # 출력: Hello
print(obj1.arg2) # 출력: 10
print(obj2.arg1) # 출력: World
print(obj2.arg2) # 출력: 20
위의 예제에서 MyClass에는 arg1과 arg2라는 인스턴스 변수가 있습니다.
' __init__ ' 생성자를 통해 각 객체의 arg1과 arg2를 초기화하고, obj1과 obj2는 각각 서로 다른 값을 가지고 있습니다.
이러한 인스턴스 변수는 객체가 생성되어 메모리에 할당될 때마다 독립적으로 관리되며, 다른 객체에 영향을 주지 않습니다.
여기까지 클래스, 클래스의 생성자와 인스턴스 변수 까지 모두 알아보았습니다!
감사합니다.
'파이썬(python) 기본' 카테고리의 다른 글
파이썬 효율적인 데이터 처리 : 제너레이터(generator)이란? 제너레이터 표현식 (0) | 2023.08.02 |
---|---|
파이썬 데이터 처리 : 이터러블(iterable)과 이터레이터(iterator) (0) | 2023.08.02 |
파이썬 함수 4편: *args, **kwargs , 가변 인자 처리 방법 (0) | 2023.07.25 |
파이썬 함수 3편: 데코레이터(decorator) 정의 및 사용법 (0) | 2023.07.25 |
파이썬 함수 2편: 람다(lambda) 함수와 예제들 (map, filter, reduce 포함) (0) | 2023.07.25 |