定时 작업을 위한 Go의 Timer와 Ticker 사용
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Go로 주기적 작업이나 지연 실행이 필요한 소프트웨어 개발자, 중간 수준 이상의 Go 사용자
핵심 요약
time.Timer
는 한 번만 실행하는 일회성 타이머,time.Ticker
는 주기적으로 실행하는 타이머로,NewTimer
,AfterFunc
,NewTicker
함수로 생성Reset(d Duration) bool
은 타이머의 기간을 재설정하고,Stop() bool
은 타이머 중지ticker.C
채널은 주기적으로 현재 시간을 전달하며,context
와 함께 사용하여 리소스 누수 방지 가능AfterFunc
는 콜백 함수를 직접 실행하고,NewTimer
는 채널을 통해 이벤트 전달
섹션별 세부 요약
1. Timer 생성 및 기본 사용법
NewTimer(d Duration)
은 지정한 시간 후 채널C
에 시간을 전달AfterFunc(d Duration, f func())
은 타이머 종료 시 콜백 함수f
를 직접 실행AfterFunc
는Stop()
을 통해 실행 취소 가능,NewTimer
는 채널을 통해 이벤트 처리
2. Reset 메서드 동작
Reset(d Duration) bool
은 타이머가 활성 상태일 경우true
반환, 종료/중지 상태일 경우false
- 예:
timer.Reset(1s)
는 1초 후에만 실행, 기존 5초 타이머를 재설정 시false
반환
3. Stop 메서드 동작
Stop() bool
은 타이머가 중지 상태일 경우false
반환- 채널
C
은 중지 후에도 닫히지 않으므로,context
와 함께 사용하여 루프 종료 조건 설정 필요
4. Ticker의 주기적 실행
NewTicker(d Duration)
은 지정한 간격마다ticker.C
에 현재 시간 전달for range ticker.C
로 이벤트 수신 가능,context
와 함께 사용하여 리소스 누수 방지
5. Ticker의 Reset 및 Stop
Reset(d Duration)
은 Ticker의 간격 재설정,Stop()
은 Ticker 중지ticker.C
는 중지 후에도 닫히지 않으므로,context
나quit
채널로 루프 종료 조건 설정 필요
결론
ticker.C
와context
를 함께 사용하여 리소스 누수 방지, 타이머 중지 시 채널 닫기 필요 없음AfterFunc
는 간단한 콜백 처리에 적합,NewTimer
는 채널 기반 이벤트 처리에 적합Reset
과Stop
메서드의 반환값을 통해 타이머 상태를 정확히 확인하여 예기치 않은 동작 방지- 주기적 작업은
ticker.C
와for range
또는select
구문을 사용하여 처리하며,context
를 통해 종료 조건 설정 필수