우선 코루틴의 사전적 정의를 살펴보면
즉 코루틴의 사전적 정의는 협동루틴을 뜻하는 것이고 유니티 Docu에서 말하는 유니티의 코루틴이란 아래와 같다.
이는 즉 Update 메서드에서 계속 실행되는 다른 코드들과 다르게 코루틴을 이용하면 Update 메서드가 아닌 원하는 곳에서 지속적으로 프레임을 넘기며 연속 작업이 가능하고 또 중단 시키는 것과 자원 리소스 관리 측면에서도 유용하게사용할수 있다는 것이다. (메모리를 선점하지 않기 때문)
*그만큼 중요하고 실무에 많이 쓰이는 메서드이다.
하지만 단점으로는 코루틴은 오브젝트가 활성화 되어있을때가 아니면 에러를 유발할수 있고 하나의 코루틴의 동작이 끝날때 까지 다른 코루틴들은 대기하게 된다 또 부가적으로 가비지가 많이 생성될수 있다는 단점이 있다.
사용시엔 IEnumerator 형식의 메서드를 작성하고 while 문 혹은 for문등 반복문을 사용하여 응용할수 있다
사용할땐 StartCoroutine 메서드로 활성화 하여 StopCoroutine 메서드 를 이용해 중지 가능하다.
위 코드에서는 고양이를 회전 시켜보았다 방향키 아래 버튼을 누르고 있는 입력으로 메서드를 활성화 하고
( 계속 누르던 방향키 아래 버튼에서 손을 떼면 고양이가 회전을 멈춘다)
주석 if 문 처럼 while문을 특정 조건에서 정지시켜주어야 메서드 탈출이 가능하다 ( 주석을 풀고 StopCoroutine을 주석처리해주면 방향키 아래는 한번만 눌러도 계속 회전하며 고양이는 계속 돌다 방향키 UP버튼을 누르면 회전을 멈춘다.)
스레드에 대해 알아보자
스레드는 프로세스 내에서 작업을 실행 - 수행하는 주체를 의미하고 스레드는 프로세스보다도 작은 실행 흐름의 최소 단위이다.
이러한 스레드를 두개 이상 가진 프로세스를 멀티스레스 프로세스라고 한다.
여기서 프로세스란 실행중인 프로그램을 얘기하는데 쉽게말해 하드 디스크에 설치된 프로그램이 메인 메모리에 올라온 상태로, 백그라운드나 포그라운드에서 실행 중인 상태를 말한다.
프로세스 만으로 돌아가던 이전과는 달리 프로세스를 더 작은 단위로 쪼개 메모리에 올려 운용하는 스레드는 다양한 연산을 더 빠르게 실행할수 있게 고안된 실행체계의 단위이다.
다만 덕분에 자원 선점과 동기화 문제가 생기게 되었는데 이는 대다수의 OS 에서 스케줄러를 이용해 스레드를 최소 단위로 하여 작동시킨다.
여기까지가 스레드의 정의이고 코루틴과의 차이점을 정리하자면
- 스레드는 방금 언급했듯이 별개의 스레드에서 동작하며 동시에 여러가지 일을 처리할수 있다.
- = 메모리 선점형 = 동시수행이 가능하다.
- 반면 코루틴은 단일 스레드에서 동작하며 여러일을 나누어 하나씩 처리한다.
- = 메모리 비선점형 = 동시수행이 불가능하다.
여기까지가 정리 내용
스레드의 개념과 코루틴의 개념은 이해하였지만 아직 응용 혹은 실제 게임 개발에서의 사용은 좀더 고려의 여지가 있을듯하다. 좀더 예시를 찾아보며 일반적으로 스레드에서 사용하던 Update 메서드와의 차이점을 몸소 체감하는것이 더 빠른 이해를 도울 수 있을 듯하다. (아직 코루틴의 주요 메서드들을 잘 모르기도 하고 ㅎㅎ)
'유니티 엔진 클라이언트 > 수업 과제' 카테고리의 다른 글
[유니티] Setting 창 제작 (클립보드 복사 플러그인) (0) | 2023.02.19 |
---|---|
[유니티] 상점 탭메뉴 스크롤 연동 (0) | 2023.02.19 |
[유니티] 종스크롤 2D 스페이스 슈터 ver1.1 (0) | 2023.02.11 |
[유니티] 클로저 - 반복문 안에서의 람다 사용시 주의사항 (2) | 2023.02.06 |
[유니티] 오브젝트 풀링이란 무엇인가? + 구현 (0) | 2023.02.05 |