Go 언어의 `time.Timer`와 `time.Ticker`의 차이점은 무엇인가요?
A1:
- `time.Timer`는 일정 시간이 경과한 후 단 한 번 신호를 발생시키는 타이머입니다.
- `time.Ticker`는 일정 간격으로 반복적으로 신호를 발생시키는 타이커입니다.
---
Q2: `time.Timer`는 어떤 상황에서 사용하나요?
A2:
`time.Timer`는 "딜레이 후 한 번 이벤트 발생" 같은 경우에 사용됩니다. 예를 들어, 5초 후에 처리 작업을 실행하거나 타임아웃을 감지할 때 적합합니다.
---
Q3: `time.Ticker`는 어떤 상황에서 사용하나요?
A3:
`time.Ticker`는 일정한 주기로 반복 작업을 수행할 때 사용합니다. 예를 들어, 1초마다 상태를 갱신하거나, 10분마다 로그를 기록하는 등 주기적인 작업에 적합합니다.
---
Q4: `time.Timer`가 신호를 발생시키는 방식은 어떻게 되나요?
A4:
`time.Timer`는 설정한 시간이 지나면 내부 채널에 현재 시간을 보냅니다. 이 채널을 통해 타이머가 만료되었음을 알 수 있습니다. 이후에는 타이머가 자동으로 멈춥니다.
---
Q5: `time.Ticker`가 신호를 발생시키는 방식은 어떻게 되나요?
A5:
`time.Ticker`는 설정한 간격마다 내부 채널에 현재 시간을 보냅니다. 이 채널을 통해 주기적인 신호를 계속해서 받을 수 있습니다. `Stop()`을 호출하지 않으면 계속 반복됩니다.
---
Q6: 두 타입 모두 신호를 받는 채널은 어떻게 되나요?
A6:
- `time.Timer`의 `C` 필드는 한 번 값을 보내고 닫히지 않는 채널입니다.
- `time.Ticker`의 `C` 필드는 일정 간격으로 값을 보내는 채널입니다.
---
Q7: 타이머/티커를 취소 또는 중지하는 방법은?
A7:
- `Timer.Stop()`은 남아있는 타이머 이벤트를 취소합니다.
- `Ticker.Stop()`은 티커의 반복 신호를 멈춥니다.
반드시 필요가 끝났다면 호출하여 리소스를 해제해야 합니다.
---
Q8: 여러 번 신호 발생이 필요하다면 어떤 걸 써야 하나요?
A8:
`time.Ticker`를 사용해야 합니다. `time.Timer`는 한 번만 신호를 보내므로 반복해서 타이머를 생성해야 반복 신호를 구현할 수 있습니다.
---
Q9: 반복 신호가 필요 없고, 단일 지연이 필요한데 `time.Ticker`를 써도 되나요?
A9:
가능은 하지만 권장하지 않습니다. `time.Ticker`는 계속해서 신호를 보내기 때문에 종료 처리를 하지 않으면 메모리 누수 및 리소스 낭비가 발생합니다. 단일 지연에는 `time.Timer`가 적합합니다.
---
Q10: `time.Timer`와 `time.Ticker`를 혼동할 경우 발생할 수 있는 문제는?
A10:
- `time.Timer` 대신 `time.Ticker`를 써서 반복 신호를 제대로 중지하지 않으면 고루틴이 블로킹되거나 리소스가 낭비됩니다.
- 반대로 반복 작업이 필요한데 `time.Timer`를 반복 생성하면 코드가 복잡해지고 비효율적입니다.
---
정리하면:
- `time.Timer`: 단일 지연 후 한 번 신호 발생
- `time.Ticker`: 일정 간격으로 반복 신호 발생
각 용도에 맞게 사용하고, 종료 시에는 반드시 `Stop()` 호출로 리소스를 해제하는 것이 좋습니다.
작성자:
박예서 [비회원]
| 작성일자: 1년 전
2024-09-19 01:50:34
조회수: 162 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 162 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.