파이썬 모듈 간 고유 객체 공유하기
여러 모듈에서 하나의 고유한 객체에 접근해야 하는 상황은 흔히 발생합니다. 이 개념이 바로 싱글톤(Singleton) 패턴입니다. 즉, 한 번 생성된 객체를 프로그램 전체에서 단 하나만 존재하도록 하고, 어디서든 동일한 인스턴스를 사용하는 방식입니다.
파이썬에서는 크게 두 가지 방법으로 이를 구현할 수 있습니다.
방법 1: 임포트한 모듈의 속성으로 할당하기
첫 번째 방법은 이미 생성된 객체를 임포트한 모듈의 변수로 직접 할당하는 것입니다. 예를 들어, myobj라는 객체가 이미 인스턴스화되어 있고, 이를 B 모듈에서 사용하고 싶다면 다음과 같이 작성할 수 있습니다.
>>> import B
>>> B.myobj = myobj
이렇게 하면 B 모듈 내부에서 myobj를 다른 전역 속성처럼 자유롭게 사용할 수 있습니다. 파이썬의 모듈은 그 자체로 객체이기 때문에, 모듈에 새로운 속성을 동적으로 추가하는 것이 가능합니다.
방법 2: 함수 매개변수로 객체 전달하기
두 번째 방법은 해당 객체가 필요한 곳마다 매개변수로 전달하는 것입니다. 예를 들어, B 모듈에 이 객체를 필요로 하는 myfunc라는 함수가 있다면 다음과 같이 호출할 수 있습니다.
>>> import B
>>> B.myfunc(myobj)
이 방식은 의존성을 명시적으로 드러내기 때문에 코드의 가독성과 테스트 용이성이 높아진다는 장점이 있습니다.
어떤 방법을 선택해야 할까?
모듈 속성으로 할당하는 첫 번째 방법은 구현이 간단하고 전역적인 접근이 가능하지만, 코드 간 결합도가 높아질 수 있습니다. 반면 매개변수로 전달하는 두 번째 방법은 의존성 주입(Dependency Injection)에 가까운 구조로, 유지보수와 단위 테스트 측면에서 더 권장됩니다. 프로젝트의 규모와 요구 사항에 따라 적절한 방식을 선택하시기 바랍니다.