Coroutine?
Co + routine : 협력하는 루틴
StartCoroutine과 StopCoroutine에 관한 3가지 방식
(StopCoroutine이 작동을 안하는 이유)
이와 같은 코루틴이 있을 때
이를 start시키고 stop시키는 3가지 방식의 차이에 대해 살펴본다.
<2> 처럼 그냥 코루틴 자체 함수를 매개변수로 넣어주게 되면
StopCoroutine을 했을 때 해당 코루틴을 찾지 못해 StopCoroutine이 작동하지 않는다.
이 경우 <1> 과 같이 미리 timeCo에 인스턴스를 빼서 넣어줘서
StopCoroutine이 확실하게 어떤 코루틴을 stop시켜야하는지 알 수 있게 해주면 해결된다.
또는 <3> 처럼 string methodName을 통해 처리하면
런타임에 리플렉션으로 코루틴을 찾아 처리해주는데,
DelayTimeCo를 한 개만 돌리고 있다면 stopCoroutine이 적절히 작동하지만, 여러개가 작동하고 있다면 우리가 원하는 코루틴을 멈출 수 없게 될 수도 있다.
따라서 <1>처럼 사용해주는게 가장 적절하다.
Ienumerator의 이해 - 반복자 패턴
Enumerator는 이런 구조로 작동하는데
enumerable은 정해진 순서대로 반복할 수 있는 놈이고, Enumerator라는 정해진 순서로 돌릴 수 있는 도구를 가지고 있다.
저게 stack이면 stack의 순서대로 빼주는 것이고, queue 면 queue의 순서대로 빼주는 것이다.
이러한 패턴을 반복자 패턴이라고 한다.
그리고 우리가 저 enumerable을 상속받아 우리가 실제로 쓰는 것이다.
그 예시로 stack을 확인해보면 IEnuerable을 상속받고 있다.
캡슐화
foreach는 IEnumerable을 상속받은 intList를 가져다 쓰고
또 그 안에서 GetEnumerator를 통해 IEnumerator를 상속받은 놈을 사용하지만
foreach(기능을 사용하는 놈)가 알아야하는 건 안에 구현된 내용이 아니라,
사용할 수 있는 형태만 알면 된다.
이렇게 내부의 기능의 구현을 숨기면서 사용자에게 인터페이스(사용할 수 있는 기능)만을 제공해주는 것을 캡슐화라고 한다.
따라서 Coroutine에 있는 Inumerator가 뜻하는 것은 순서를 뜻하는 것이다.
<정리>
Enumerable : 정해진 순서대로 반복시킬 수 있는 도구(Enumerator)를 가지고 있어서 정해진 순서대로 반복시킬 수 있는 것
Enumerator : 정해진 순서대로 반복시키는 도구
'C# > C# 학습 (TIL)' 카테고리의 다른 글
유니티 Roll a ball 실습 (0) | 2022.06.26 |
---|---|
C# 중급문법 Day9 디자인패턴 : 커맨드패턴, 퍼사드패턴 (0) | 2022.06.24 |
C# 중급문법 Day7 Reflection / DeepCopy 일반화(reflection 적용) (0) | 2022.06.22 |
C# 디자인패턴 : 템플릿메서드 / 옵저버패턴 (0) | 2022.06.21 |
C# 중급문법 Day6 EventHandler (0) | 2022.06.21 |