http://rintiantta.blog.me/40113858529
Yield 라는 키워드는 Break 와 Return 과 함께 쓰인답니다.
음.. Break 는 자주 활용이 되지는 않는 것 같습니다만, 강의이니 뭐 알아봐야죠 ㅎ..!
간단하게, Yield 라는 키워드는 일반적인 것을 IEnumerable 로 변환을 시켜줍니다..
뭔소린지, 해보면서 봅시다..!
우선 프로젝트를 만듭니다. 이름은 EnumYieldLesson 입니다..!
원래, 강의중에 클래스를 따로 만드는 타입이잖습니까..
일반 교재에는 다 합치지만.. 실제로 안 그러니... 연습도 되시라구 하는데...
오늘건 나누면 조금 길어지는 관계로 합쳤습니다... 죄송합니다 =_=...
어찌하였거나, YieldTest 라는 이름의 클래스를 만들어주었습니다 ㅇㅅㅇ..!
그리고 아래와 같이 days 라는 이름으로 만들어주었습니다.
참고로, MSDN 에 있는 내용인데요. 음... 그냥 Yield Return 과 GetEnumerator 에 대한 설명밖에 없길래
추가하고 합쳐보았습니다. ㅎㅎ.... (MSDN은 저작권이.. 교육용으로는 안 걸리지...)
다음과 같은 IEnumerator 로 리턴하는 GetEnumerator라는 메소드를 만듭니다.
using 하라는 말이 뜨니 using 해줍시다.
참고로, 이름을 바꿔서 예제를 따라해보는 분들이 계실텐데요. (제가 그런 타입이라..)
GetEnumerator 라는 이름은 고정하셔야 합니다. 잠시후 뒤에서 언급할게요.
그리고 아래와 같이 메소드를 작성했는데요.
일단 리턴값이 IEnumerator 고, 리턴시 yield 라는 것을 쓴 것을 보실 수 있답니다.
리턴이 분명 string 으로 될텐데, yield 라는 키워드를 붙임으로써, IEnumerable 로 바뀌게 됩니다.
"어라... 리턴이 IEnumerator 인테.. 왜... IEnumerable.. ㅇㅅㅇ ... ?"
『잠시후 봅시다...ㅎ』
근데 왜 이름이 고정이냐면요 ㅇㅅㅇ
원래 IEnumerable 인터페이스의 상속을 받아서 구현해야합니다. ㅇㅅㅇ
인터페이스 구현버튼을 누르시면 아래와 같이 GetEnumerator 라는 메소드가 구현되는데요.
원래는 이렇게 해서 해야하지만... region 때문에 길이가 길어서 그냥 하고 있습니다...
어찌하였거나, 이어서 메소드를 만드는데요.
OtherGetEnum() 이라고 만들었습니다. 내부의 for 문을 foreach도, for 도 된다는 뜻으로 해본거구요.
주의하실것은.. IEnumerable 로 리턴한다는 것입니다...
"ㅇㅅㅇ...."
자, 그럼 이제 만들었으니, 사용해봅시다~!
아래와 같이 인스턴스를 만들었답니다.
그리고 아래와 같이 실행이가능합니다.
그냥 꼽으시면, foreach 에서 알아서 "아, GetEnumerator() 실행하라는 거구나."
하고 GetEnumerator 를 실행합니다.
근데 문제가 있습니다. foreach 에는 IEnumerator 값을 꼽을 수 없습니다.
따라서, 내부에서 한번 더 변형이 일어나서 IEnumerable 로 바뀐답니다.
실행 결과입니다. 간단하죠 ?
이어서, 아래와 같이 우리가 만든 녀석을 써보았습니다.
위와 실행 결과가 같답니다 ㅎㅎ
또한 아래와 같이 따로 뺀다음 꼽을 수도 있는 것을 생각하시기 바랍니다.
"오오, 그럼 IEnumerator 로 GetEnumerator 뽑아서 꼽아도 되는거 아닌가요?"
『해보시길 바랍니다. 에러날겁니다. ㅇㅅㅇ... IEnumerator 는 꼽을 수 없다구요 ㅎ...』
이어서, yield break; 를 보도록 합시다.
아래와 같이 메소드를 수정했는데요.
yield break; 는 yield return 을 끝내라는 말입니다.
즉, 지금 한데까지만 IEnumerable 로 바꾸라는 이야기지요.
그래서 아래와 같이 것을 실행하시면
이렇게 됩니다. yield return 이 중간에 끊긴 것을 확인하실 수 있습니다.
자... 그럼 마지막으로 무언가 하나를 또 보기위해서 AnotherGetEnum 을 만듭니다.
『...복사해서.. AnOtherGetEnum 이 되었다는 설이..』.... 죄송합니다.
이어서, 다음과 같이 써주었습니다.
"ㅇㅅㅇ ?!"
실행결과를 보시는 편이 이해가 빠를 것이라고 생각됩니다 ㅎㅎ....
아래와 같이 메인에 써주었어요 ㅇㅅㅇ..!
자, 출력결과가 보이시나요 ㅇㅅㅇ ?
하나, 하나, 하나 출력되었습니다.
이와같이 yield 키워드는 IEnum 계열과 foreach 와 함께쓰이는 녀석입니다.
그럼 오늘 강의 끝 ~
오늘건 약간 길었지요 ㅇㅅㅇ....?
음.. 아직 베이직에서 아직 인터페이스도 안했는데.... 중급강의에서 나오니 조금 그렇지만..
아직 보신 분이 많지 않으니 괜찮을듯 ~ ㅎㅎ;;
[출처] C# 중급 - 8강 - Keyword - Yield|작성자 린트
'프로그래밍(Programming) > C#' 카테고리의 다른 글
C# queue (0) | 2015.09.02 |
---|---|
c# Stack (0) | 2015.09.02 |
C# | DLL 만들고 사용하기 (0) | 2015.09.02 |
리플렉션(refelction) 활용 (0) | 2015.09.01 |
열거형 GetEnumerator(), IEnumerable, IEnumerator 정의 (0) | 2015.09.01 |