본문 바로가기
Python

[Python] 딕셔너리 사용하기

by IronAreum 2024. 12. 15.
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()

장점

  1. 여러 키를 한 번에 관리 가능.
  2. 새로운 키를 추가할 때 CONFIG 딕셔너리만 업데이트하면 됨.
  3. 코드가 깔끔하고 직관적임.

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()

장점

  1. OOP(객체 지향 프로그래밍) 방식으로 상태 관리.
  2. 클래스 내부 메서드로 키 관리 로직을 쉽게 확장 가능.
  3. 특정 키만 가져오거나 업데이트하기 쉬움.

3. 두 방법 비교

방법장점단점

딕셔너리 사용 간단하고 직관적, 모든 키를 쉽게 관리 가능 대규모 상태 관리에는 적합하지 않을 수 있음
클래스 사용 상태와 관련 로직을 분리할 수 있어 확장성 높음 초기 설계가 조금 더 복잡할 수 있음

4. 결론

  • 글로벌 변수가 많지 않다면: 딕셔너리 방식이 간단하고 적합합니다.
  • 글로벌 변수가 많거나 확장 가능성이 높다면: 클래스를 활용하여 설계하는 것이 좋습니다.

 

728x90