파이썬에서 클래스 간 변수 공유 및 활용하기

1. 클래스 변수와 인스턴스 변수의 차이점

파이썬에서 클래스 변수는 클래스에 속한 변수로 모든 인스턴스가 공유하게 됩니다. 반면, 인스턴스 변수는 각 인스턴스 개별적으로 가지는 변수입니다.

이를 이해하기 위한 예시로 간단한 테이블을 볼까요?

변수 유형 설명 전형적인 사용 예
클래스 변수 모든 인스턴스가 공유하는 변수 학생 수를 저장하는 변수
인스턴스 변수 각 인스턴스마다 고유한 변수 학생의 이름, 성적 등

여기서 중요한 점은 **클래스 변수는 모든 인스턴스가 동일한 변수를 보지만**, **인스턴스 변수는 각자 고유한 데이터를 유지**한다는 것입니다. 이러한 개념은 클래스 간 변수를 공유할 때 특히 중요합니다.

2. 클래스 변수로 데이터 공유하기

클래스 변수를 활용하여 여러 클래스 간에 데이터를 공유할 수 있습니다. 다음은 이를 나타내는 예제입니다:

“`python
class School:
total_students = 0

def __init__(self, name):
self.name = name
School.total_students += 1

a = School(“Central High”)
b = School(“West High”)

print(School.total_students) # 출력: 2
“`

위 예제에서, **모든 School 객체는 같은 클래스 변수 `total_students`를 공유**하며, 각 인스턴스가 생성될 때마다 이 값은 증가합니다. **이러한 방식으로 클래스 변수를 사용하면 클래스 내 여러 인스턴스에서 동일한 정보를 유지**할 수 있게 됩니다.

3. 상속을 통해 변수 공유하기

상속을 사용하여 부모 클래스의 변수를 자식 클래스에서도 사용할 수 있습니다. 이는 클래스 간 변수를 공유하는 또 다른 방법입니다.

“`python
class Parent:
parent_variable = “부모 클래스 변수”

class Child(Parent):
pass

child_instance = Child()
print(child_instance.parent_variable) # 출력: 부모 클래스 변수
“`

위 예제에서 `Child` 클래스는 `Parent` 클래스를 상속받아 `parent_variable`을 **자동으로 사용 가능**하게 되었습니다. 상속을 통해 여러 클래스에서 중요한 공통 변수를 효율적으로 공유하고 활용할 수 있습니다.

4. 싱글톤 패턴을 통한 변수 공유

싱글톤 패턴은 클래스의 인스턴스를 단 하나만 존재하게 하면서, 그 인스턴스를 통해 변수를 공유하는 방법입니다. 이는 전역 객체를 사용할 때 유용합니다.

“`python
class Singleton:
_instance = None

@staticmethod
def get_instance():
if Singleton._instance is None:
Singleton._instance = Singleton()
return Singleton._instance

singleton1 = Singleton.get_instance()
singleton2 = Singleton.get_instance()

print(singleton1 is singleton2) # 출력: True
“`

이 과정을 통해 `Singleton` 클래스의 **모든 인스턴스는 같은 객체**를 참조하게 됩니다. 따라서 **변수가 인스턴스 간에 자연스럽게 공유됩니다**. 이 기법은 설정 정보와 같은 글로벌 객체를 유지할 때 유용합니다.

5. 모듈을 통한 데이터 공유

파이썬 모듈을 이용해 클래스 간 변수를 공유할 수도 있습니다. 모듈은 전역 변수처럼 동작하며, 모든 모듈이 해당 변수를 접근할 수 있습니다.

“`python
# mymodule.py
shared_variable = “모듈 내 공유 변수”

# main.py
import mymodule

print(mymodule.shared_variable) # 출력: 모듈 내 공유 변수

mymodule.shared_variable = “새로운 값”
print(mymodule.shared_variable) # 출력: 새로운 값
“`

이 방법을 사용하면 **모든 클래스가 모듈의 변수를 쉽게 접근 및 수정**할 수 있어 공유 상태를 유지하기 간편해집니다. 하지만 주의해서 사용해야 하는 점은, 변수의 상태가 예측 불가능하게 변할 수도 있으므로 신중한 설계가 필요합니다.

6. 커스텀 메소드를 통한 데이터 공유

커스텀 메소드를 만들어 인스턴스 간 변수를 공유하는 것도 가능합니다. 메소드를 통해 값을 설정하거나 가져오는 방식입니다.

“`python
class Team:
shared_data = {}

def set_data(self, key, value):
Team.shared_data[key] = value

def get_data(self, key):
return Team.shared_data.get(key)

team1 = Team()
team1.set_data(‘lead’, ‘Alice’)

team2 = Team()
print(team2.get_data(‘lead’)) # 출력: Alice
“`

위 예제에서는 `set_data`와 `get_data` 메소드를 통해 클래스의 **공유 데이터**를 설정하고 가져옵니다. 따라서 여러 인스턴스 간에 데이터를 **안전하게 관리**할 수 있습니다.

이 방법은 클래스 디자인에 유연성을 더해주고, 필요에 따라 데이터 접근 로직을 변경할 수 있는 장점을 제공합니다.