728x90
만약 반환해야 할 글로벌 변수가 많아지면, 여러 변수를 각각 반환하는 대신 딕셔너리 또는 클래스를 활용하여 관리하면 깔끔하고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 아래 두 가지 방법으로 개선할 수 있습니다.
728x90
1. 딕셔너리를 활용한 방법
딕셔너리를 사용하면 여러 글로벌 변수를 한 번에 반환하거나 관리할 수 있습니다.
개선된 코드
import json
import os
# 글로벌 변수 선언
CONFIG = {
"PEXELS_API_KEY": None,
"ANOTHER_API_KEY": None,
}
# API 키를 JSON 파일에서 로드하는 함수
def load_api_keys():
global CONFIG
config_path = os.path.join(os.path.dirname(__file__), '..', 'config', 'api_key.json')
try:
with open(config_path, 'r') as file:
data = json.load(file)
CONFIG["PEXELS_API_KEY"] = data.get("PEXELS_API_KEY", None)
CONFIG["ANOTHER_API_KEY"] = data.get("ANOTHER_API_KEY", None)
except FileNotFoundError:
print("Error: API key file not found.")
except json.JSONDecodeError:
print("Error: Failed to parse API key file.")
# 특정 API 키를 반환하는 함수
def get_api_keys():
return CONFIG
메인 파일
from utils.api_key_loader import load_api_keys, get_api_keys
def main():
# API 키 로드
load_api_keys()
# API 키 가져오기
api_keys = get_api_keys()
# 각각의 키 사용
print("PEXELS_API_KEY:", api_keys.get("PEXELS_API_KEY"))
print("ANOTHER_API_KEY:", api_keys.get("ANOTHER_API_KEY"))
if __name__ == "__main__":
main()
장점
- 여러 키를 한 번에 관리 가능.
- 새로운 키를 추가할 때 CONFIG 딕셔너리만 업데이트하면 됨.
- 코드가 깔끔하고 직관적임.
2. 클래스를 활용한 방법
글로벌 변수를 관리하는 클래스를 만들어서, 여러 키를 객체 상태로 관리할 수도 있습니다.
개선된 코드
import json
import os
# API 키 관리 클래스
class APIKeyManager:
def __init__(self):
self.PEXELS_API_KEY = None
self.ANOTHER_API_KEY = None
# API 키를 JSON 파일에서 로드
def load_keys(self):
config_path = os.path.join(os.path.dirname(__file__), '..', 'config', 'api_key.json')
try:
with open(config_path, 'r') as file:
data = json.load(file)
self.PEXELS_API_KEY = data.get("PEXELS_API_KEY", None)
self.ANOTHER_API_KEY = data.get("ANOTHER_API_KEY", None)
except FileNotFoundError:
print("Error: API key file not found.")
except json.JSONDecodeError:
print("Error: Failed to parse API key file.")
# 특정 API 키 반환
def get_key(self, key_name):
return getattr(self, key_name, None)
메인 파일
from utils.api_key_loader import APIKeyManager
def main():
# API 키 관리자 인스턴스 생성
api_manager = APIKeyManager()
# API 키 로드
api_manager.load_keys()
# API 키 가져오기
print("PEXELS_API_KEY:", api_manager.get_key("PEXELS_API_KEY"))
print("ANOTHER_API_KEY:", api_manager.get_key("ANOTHER_API_KEY"))
if __name__ == "__main__":
main()
장점
- OOP(객체 지향 프로그래밍) 방식으로 상태 관리.
- 클래스 내부 메서드로 키 관리 로직을 쉽게 확장 가능.
- 특정 키만 가져오거나 업데이트하기 쉬움.
3. 두 방법 비교
방법장점단점
딕셔너리 사용 | 간단하고 직관적, 모든 키를 쉽게 관리 가능 | 대규모 상태 관리에는 적합하지 않을 수 있음 |
클래스 사용 | 상태와 관련 로직을 분리할 수 있어 확장성 높음 | 초기 설계가 조금 더 복잡할 수 있음 |
4. 결론
- 글로벌 변수가 많지 않다면: 딕셔너리 방식이 간단하고 적합합니다.
- 글로벌 변수가 많거나 확장 가능성이 높다면: 클래스를 활용하여 설계하는 것이 좋습니다.
728x90
'Python' 카테고리의 다른 글
[Python] 전역변수 사용하기 (global 변수) (5) | 2024.12.14 |
---|---|
[Python] 파일경로 불러오기 (절대경로,상대경로) (2) | 2024.12.14 |
[Python] FFmpeg API 사용하기 (0) | 2024.12.14 |
[Python] FFmpeg - 윈도우PC 폰트 불러오기 (2) | 2024.12.14 |
[Python] 문자열 처리방식 접두사 r, f (8) | 2024.12.10 |