타임 트랙(Time Track) 자료구조는 시간에 따른 데이터나 이벤트의 기록을 저장하고 관리하는 데 사용할 수 있습니다. 예를 들어, 특정 시점에 발생한 이벤트나 데이터를 저장하고, 이를 시간 순서대로 관리하거나 조회하는 경우가 많습니다.

파이썬 리스트를 활용하여 타임 트랙 자료구조를 구현하면, 시간에 따른 데이터를 간단하게 저장하고 특정 시간 범위에 발생한 데이터를 검색하는 기능 등을 추가할 수 있습니다. 리스트의 기본 특성을 활용하여 시간 순서대로 데이터를 쉽게 관리할 수 있습니다.

1. 타임 트랙 설계

타임 트랙 자료구조는 다음과 같은 주요 기능을 포함할 수 있습니다:

  • 이벤트 기록: 특정 시간과 그에 해당하는 데이터를 기록합니다.
  • 시간 범위 검색: 주어진 시간 범위 내에서 발생한 이벤트를 검색합니다.
  • 최신 이벤트 조회: 가장 최근에 발생한 이벤트를 쉽게 조회할 수 있는 기능.

2. 타임 트랙 자료구조 구현

import time

class TimeTrack:
    def __init__(self):
        """
        시간에 따른 데이터 트랙을 저장할 리스트 초기화.
        각 요소는 (타임스탬프, 데이터)로 구성됨.
        """
        self.track = []

    def add_event(self, data):
        """
        현재 시간과 데이터를 기록.
        """
        timestamp = time.time()  # 현재 시간의 타임스탬프를 가져옴
        self.track.append((timestamp, data))
        print(f"Event added at time {timestamp}: {data}")

    def get_latest_event(self):
        """
        가장 최근에 추가된 이벤트를 반환.
        """
        if not self.track:
            return None  # 리스트가 비어있으면 None 반환
        return self.track[-1]  # 마지막 요소가 가장 최근의 이벤트

    def get_events_in_range(self, start_time, end_time):
        """
        특정 시간 범위 내에서 발생한 이벤트들을 반환.
        start_time: 범위의 시작 시간 (타임스탬프)
        end_time: 범위의 끝 시간 (타임스탬프)
        """
        return [(timestamp, data) for (timestamp, data) in self.track if start_time <= timestamp <= end_time]

    def __repr__(self):
        """
        저장된 모든 이벤트를 출력하는 메서드.
        """
        return f"TimeTrack({self.track})"


# 예제 사용

# 타임 트랙 생성
time_track = TimeTrack()

# 이벤트 추가
time_track.add_event("Start Task A")
time.sleep(1)  # 1초 대기
time_track.add_event("End Task A")
time.sleep(1)  # 1초 대기
time_track.add_event("Start Task B")

# 최근 이벤트 조회
print("\nLatest event:")
print(time_track.get_latest_event())

# 시간 범위 검색
start_time = time.time() - 3  # 3초 전부터의 기록 검색
end_time = time.time()  # 현재 시간까지
print("\nEvents in the last 3 seconds:")
events_in_range = time_track.get_events_in_range(start_time, end_time)
for event in events_in_range:
    print(event)

코드 설명

  1. TimeTrack 클래스:

    • 이 클래스는 이벤트와 해당 이벤트가 발생한 시간을 저장합니다.
    • 각 이벤트는 (타임스탬프, 데이터) 형태로 리스트에 저장되며, 타임스탬프는 time.time()을 사용해 초 단위로 기록합니다.
  2. add_event(self, data) 메서드:

    • 새로운 이벤트가 발생하면, 현재 시간의 타임스탬프와 함께 데이터를 리스트에 추가합니다.
    • time.time() 함수는 현재 시간을 초 단위의 부동소수점 수로 반환합니다.
  3. get_latest_event(self) 메서드:

    • 리스트에서 가장 최근에 추가된 이벤트를 반환합니다. 리스트의 마지막 요소가 가장 최근 이벤트이므로, self.track[-1]을 사용해 마지막 요소를 반환합니다.
  4. get_events_in_range(self, start_time, end_time) 메서드:

    • 주어진 시간 범위(start_time, end_time) 내에 발생한 이벤트들을 검색하여 리스트로 반환합니다.
    • 리스트 컴프리헨션을 사용하여 주어진 시간 범위에 속하는 이벤트만 필터링합니다.
  5. __repr__(self) 메서드:

    • 객체를 문자열로 표현할 때, 저장된 모든 이벤트를 출력합니다.

실행 결과

Event added at time 1697544667.065451: Start Task A
Event added at time 1697544668.067688: End Task A
Event added at time 1697544669.070716: Start Task B

Latest event:
(1697544669.070716, 'Start Task B')

Events in the last 3 seconds:
(1697544667.065451, 'Start Task A')
(1697544668.067688, 'End Task A')
(1697544669.070716, 'Start Task B')

기능 설명

  1. 이벤트 기록: add_event 메서드를 통해 이벤트와 그에 대한 시간을 기록합니다.
  2. 최신 이벤트 조회: get_latest_event 메서드를 사용하여 리스트에서 가장 최근에 발생한 이벤트를 조회할 수 있습니다.
  3. 시간 범위 검색: get_events_in_range 메서드를 통해 특정 시간 범위 내에서 발생한 이벤트만 필터링하여 검색할 수 있습니다.

확장 가능성

  • 이벤트 삭제: 특정 시간 또는 조건에 해당하는 이벤트를 삭제하는 기능을 추가할 수 있습니다.
  • 정렬된 삽입: 타임스탬프를 기준으로 삽입 시 정렬된 형태를 유지할 수도 있습니다.
  • 이벤트 카테고리화: 이벤트를 특정 카테고리(예: 작업, 에러, 상태 변경 등)로 분류하여 관리할 수 있습니다.
  • 타임스탬프 포맷 변경: 초 단위의 타임스탬프 대신, 더 사람이 읽기 쉬운 형식(예: YYYY-MM-DD HH:MM:SS)으로 기록할 수도 있습니다.

이 타임 트랙 자료구조는 시간 기반 데이터 추적이 필요한 다양한 상황에서 유용할 수 있으며, 특히 로그 시스템이나 이벤트 기록 시스템 등에 적용할 수 있습니다.

+ Recent posts