갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • c# delegate
  • 게임 매출 순위
  • C# boxing
  • 유니티 그래프 그리기
  • 유니티 골드그래프
  • 강남 방탈출
  • Unity Graph
  • C++ 소멸자
  • c# 코루틴
  • 유니티 그래프
  • 게임매출순위
  • 2020년 게임 매출
  • c# collection
  • 모바일 게임 순위
  • c# Thread
  • C# 예외 처리
  • C++ 상속
  • 알고리즘
  • c# coroutine
  • 글로벌게임매출
  • 전세계게임매출순위
  • pc게임 순위
  • C++
  • c# unboxing
  • 게임 디자인 패턴
  • 자바
  • 롤 골드그래프
  • pc 게임 순위
  • C++ virtual
  • 전세계 게임 매출

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥
프로그래밍/C#

[C#] 코루틴 (COROUTINE) (3)

[C#] 코루틴 (COROUTINE) (3)
프로그래밍/C#

[C#] 코루틴 (COROUTINE) (3)

2020. 5. 5. 16:24
728x90
반응형

1. 코루틴 예제

using System;
using System.Collections;
using System.Collections.Generic;

class Program {
    // SUBROUTINE
    public static int Foo() {
        Console.WriteLine("1"); return 10;
        Console.WriteLine("2"); return 20;
        Console.WriteLine("3"); return 30;
        Console.WriteLine("4"); return 40;
        Console.WriteLine("5"); return 50;
    }
    
    static void Main() {
        int n1 = Foo();
        int n2 = Foo();
        Console.WriteLine($"{n1}, {n2}"); // 10, 10
    }
}

 

일반적인 코드이다.
코루틴이 아닌 일반 함수인데 1을 출력하고 10을 반환하고 2를 출력하고 20을 반환.. 5까지 한다.
하지만 일반함수이므로 호출 시 1을 출력하고 10을 반환하게 되면 밑의 코드는 실행이 되지 않는다.
그리고 함수를 다시 호출해도 중간부터가 아닌 처음부터 호출하게 되므로 1을 출력하고 10을 반환한다.
따라서 Main의 n1, n2를 출력해보면 둘 다 10이 나오는것을 볼 수 있다.
위의 코드를 코루틴으로 바꿔보자.
코루틴 메소드를 만드는 방법이 있는데 반환 타입과 방법을 맞추어야 한다.

 ① 코루틴 메소드 만드는 방법

 

using System;
using System.Collections;
using System.Collections.Generic;

class Program {
    // COROUTINE - 열거자 인터페이스 타입으로 반환하는 경우
    public static IEnumerator<int> Foo() {
        Console.WriteLine("1"); yield return 10;
        Console.WriteLine("2"); yield return 20;
        Console.WriteLine("3"); yield return 30;
        Console.WriteLine("4"); yield return 40;
        Console.WriteLine("5"); yield return 50;
    }
    
    static void Main() {
        // 코루틴 메소드 호출
        IEnumerator<int> e = Foo();
        
        e.MoveNext();
        int ret1 = e.Current;
        
        e.MoveNext();
        int ret2 = e.Current;
        
        Console.WriteLine($"{ret1}, {ret2}"); // 10, 20
    }
}

 

위는 열거자 인터페이스 타입으로 반환하는 경우
아래는 컬렉션 인터페이스 타입으로 반환하는 경우이다.
나중에 LINQ같은 것들이 컬렉션 인터페이스 타입을 이용한다.

 

using System;
using System.Collections;
using System.Collections.Generic;

class Program {
    // COROUTINE - 컬렉션 인터페이스 타입으로 반환하는 경우
    public static IEnumerable<int> Foo() {
        Console.WriteLine("1"); yield return 10;
        Console.WriteLine("2"); yield return 20;
        Console.WriteLine("3"); yield return 30;
        Console.WriteLine("4"); yield return 40;
        Console.WriteLine("5"); yield return 50;
    }
    
    static void Main() {
        // 코루틴 메소드 호출
        IEnumerable<int> c = Foo();
        IEnumerator<int> e = c.GetEnumerator();
        
        e.MoveNext();
        int ret1 = e.Current;
        
        e.MoveNext();
        int ret2 = e.Current;
        
        Console.WriteLine($"{ret1}, {ret2}"); // 10, 20
    }
}

 ② 코루틴 메소드 호출하는 방법

    => 메소드 호출 후 열거자 참조 얻기

    => 열거자.MoveNext()로 호출

    => 메소드가 yield return 한 값은 열거자.Current를 통해 얻을 수 있다.

728x90
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C#] LINQ 원리  (0) 2020.05.07
[C#] LINQ 개념 (Language INtegrated Query)  (0) 2020.05.06
[C#] 코루틴 (COROUTINE) (2)  (0) 2020.05.05
[C#] 코루틴 (COROUTINE) (1)  (0) 2020.04.29
[C#] Collection Method  (0) 2020.04.27
  • 1. 코루틴 예제
'프로그래밍/C#' 카테고리의 다른 글
  • [C#] LINQ 원리
  • [C#] LINQ 개념 (Language INtegrated Query)
  • [C#] 코루틴 (COROUTINE) (2)
  • [C#] 코루틴 (COROUTINE) (1)
갓똥
갓똥
공부하며 알아가는 내용을 정리해 봅니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.