Python의 __init__ 과 self의 이해
파이썬 클래스의 기본 구조
파이썬 클래스는 객체지향 프로그래밍의 기본 구성 요소 중 하나로, 데이터와 해당 데이터를 처리하는 메서드를 포함하는 사용자 정의 데이터 타입이다.
클래스는 객체의 설계도 이며, 객체는 클래스로부터 생성된 인스턴스이다.
클래스를 사용하면 데이터와 함꼐 메서드를 논리적으로 묶어서 사용할 수 있다.
class ClassName:
# 클래스 변수 (모든 객체가 공유하는 변수)
class_variable = 0
# 초기화 메서드 (생성자, 객체가 생성될 때 자동으로 호출됨)
def __init__(self, parameter1, parameter2, ...):
# 인스턴스 변수 (객체마다 별도로 유지되는 변수)
self.instance_variable1 = parameter1
self.instance_variable2 = parameter2
# ...
# 클래스 메서드 (클래스에 속한 함수, 첫 번째 매개변수로는 관례적으로 cls를 사용)
@classmethod
def class_method(cls, parameter):
# ...
# 인스턴스 메서드 (객체에 속한 함수, 첫 번째 매개변수로는 관례적으로 self를 사용)
def instance_method(self, parameter):
# ...
클래스 메서드와 인스턴스 메서드
클래스 메서드는 클래스 자체의 속성에 접근하거나 수정이 가능하고 아래처럼 호출해서 사용한다.
# 클래스 메서드
@classmethod
def class_method(cls, parameter):
# cls를 사용하여 클래스 변수에 접근 가능
cls.class_variable += 1
# 호출 방법
ClassName.class_method(parameter)
인스턴스 메서드는 메서드가 속한 객체의 속성에 접근하거나 수정할 수 있으며 아래처럼 객체를 통해 호출한다.
또한 인스턴스 메서드는 객체와 관련된 동작을 수행하므로 해당 객체를 통해서만 호출할 수 있다.
# 인스턴스 메서드
def instance_method(self, parameter):
# self를 사용하여 인스턴스 변수에 접근 가능
self.instance_variable = parameter
# 호출 방법
obj = ClassName()
obj.instance_method(parameter)
클래스 메서드는 클레스 레벨의 동작을 수행할 때 사용되고 객체의 상태에 독립적인 동작을 정의할 때 유용하다.
인스턴스 메서드는 객체와 관련된 동작을 수행할 때 사용된다. 객체의 상태에 기반한 작업을 정의하거나, 객체의 속성을 수정하는 등의 동작을 수행한다.
__init__ 메서드의 활용과 구조
__init__ 메서드의 구조
__init__메서드는 파이썬 클래스에서 특별한 메서드로, 객체가 생성될 때 자동을 호출되는초기화 메서드이다.
인스턴스를 초기화하고 속성을 설정하는데 주로 사용된다.
class ClassName:
def __init__(self, parameter1, parameter2, ...):
self.instance_variable1 = parameter1
self.instance_variable2 = parameter2
# ...
self는 객체 자체를 나타내는 매개변수로 자바에서는 this와 비슷한 기능을 하는 것 같다. 이를 통해 메서드 내부에서 객체의 속성에 접근하고 수정할 수 있다.
객체. instance_variable1 = (매개변수) parameter1 이 되는 것이다.
__init__메서드의 활용
객체의 속성 초기화
class를 사용해서 객체를 만들때 __init__메서드가 호출되고, 객체의 속성을 초기화하는 역할을 한다.
기본값 설정
매개변수로 기본값을 넘겨서 객체를 생성할 때 속성값을 저장할 수 있다.
다른 객체와의 관계 설정
class Teacher:
def __init__(self, name):
self.name = name
class Student:
def __init__(self, name, teacher):
self.name = name
self.teacher = teacher # 다른 객체와의 관계 설정
self 매개변수의 의미와 활용
self의 의미
self는 파이썬에서 현재 객체(인스턴스)를 나타낸다.
메서드의 첫 매개변수를 self로 선언해주고 self로 접근할 수 있다.
self의 활용
객체의 속성에 접근
self를 사용하여 해당 메서드가 속한 객체의 속성에 접근할 수 있다.
class MyClass:
def __init__(self, x):
self.x = x
def print_x(self):
print(self.x)
다른 메서드 호출
다른 메서드를 호출할 때도 self를 사용하여 객체 내의 다른 메서드를 활용할 수 있다.
class MyClass:
def __init__(self, x):
self.x = x
def print_x(self):
print(self.x)
def update_x(self, new_x):
self.x = new_x
self.print_x() # 다른 메서드 호출
다른 객체 생성
메서드 내에서 self를 사용하여 같은 클래스의 다른 객체를 생성할 수 있다.
이를 통해서 메서드가 호출된 현재 객체와 연관된 새로운 객체를 생성할 수 있다.
class MyClass:
def __init__(self, x):
self.x = x
def create_new_object(self, new_x):
new_object = MyClass(new_x) # 새로운 객체 생성
return new_object
클래스 변수에 접근
클래스 변수에 접근할때 사용할 수 있지만 일반적으로 클래스명을 사용하여 클래스 변수에 접근하는 것이 권장사항이다.
class MyClass:
class_variable = 0
def __init__(self, x):
self.x = x
def update_class_variable(self):
self.class_variable += 1 # 클래스 변수에 접근
주의점
상속의 오용
- 상속을 오용하여 클래스간 너무 깊은 계층 구조를 만들지 않도록 주의해야 한다.
- 복잡한 계층구조는 유지보수를 어렵게 만들 수 있다.
다형성 이해
- 다형성을 올바르게 이해하고 활용해야 합니다.
- 같은 이름의 메서드를 상속받은 클래스에서 다르게 구현함으로써 다형성을 실현할 수 있다.
메서드 네이밍
- 메서드명은 해당 메서드가 무엇을 하는지 명확하게 표현하여한다.
- 가독성을 높이고 코드 이해를 돕기 위해서 의미 있는 이름을 선택해야 한다.
class Calculator:
def calculate_sum(self, numbers): # 좋은 예: 의미 있는 메서드명
pass
def do_stuff(self): # 나쁜 예: 메서드명이 모호함
pass