Log Stash

as an Industrial Personnel

unity 4

C#: object => IEnumerable<object>

1. Enumerable.Repeat() C#으로 코드를 짜다보면 종종 어떤 하나의 객체를, 그 객체를 담고 있는 IEnumerable로 변환해야 하는일이 종종 생긴다. 그땐 Enumerable.Repeat()을 사용하면 편하다.예를들어, 어떤 메소드 중간에 객체 obj가 있고, 이것을 IEnumerable 타입으로 만들어서 반환해야 한다고 생각해보자. GameObject obj; 가장 단순하게 생각해보자면, List 컨테이너를 하나 할당해서 그 리스트에 값을 집어넣을 수 있다. List list = new List(1); list.Add(obj); return list; 유니티3d 엔진의 코루틴 기능을 알고 있다면, C#의 발생자 문법을 사용하는 방식도 생각해 볼 수 있겠다. IEnumerable To..

프로그래밍 2017.11.21

Using Linq in Unity3d

애플의 64비트 정책으로 ios에선 il2cpp를 필수로 사용해야 한다는 점 덕분에 유니티 엔진에서 Linq를 사용할 수 있게 되었다. (Thanks apple) 예전에 안드로이드 앱 개발을 할 때 '비동기 로직을 동기처럼 사용할 수 있다'는 말에 홀려 RxJava를 접했던 적이 있었다. 그 당시엔 내가 Promise, Future나 함수형 프로그래밍에 대한 필요성이나 개념이 없어서도 그랬지만, 당시엔 Rx에 대한 튜토리얼이나, Best practice 관련된 문서가 거의 없었기 때문에 (물론 내가 못 찾았을 수도 있지만) 지금 보면 아주 괴상망측한 코드를 만들어 냈었다. 이후에 'Funtional thinking' 책을 읽고, 자바스크립트에서 Promise 패턴을 써보면서 내가 이전에 어떤식으로 코드를..

프로그래밍 2017.10.29

TIL: 코루틴(Coroutine)에 대해 몇 가지

루아, 유니티에서 코루틴을 써먹기만 하다가, 예전에 그냥 궁금해져서 한 번 찾아봤었다. ‘코루틴(Coroutine)’은 서브루틴보다 좀 더 일반화된 루틴이라고 볼 수 있다. 다들 알다시피 서브루틴이 자기 자신의 로직을 전부 실행 하고나면 호출자에게로 돌아간다. 하지만 코루틴은 호출자에게로 제어권이 돌아가지 않는다. 서로 다른 코루틴에게로 각자 제어권을 양보(yield) 하는 형태로 로직이 구성될 뿐. 반대로 생각하자면 서브루틴은, ‘중간에 제어권을 양보하지 않으며 할 일이 다 끝나면 무조건 호출자에게로 제어권이 반환되는 코루틴’이라고 생각할 수 있겠다. 어떤 코루틴(A)가 다른 코루틴(B)로 제어권을 양보해 준 상태에서, B에서 다시 A로 제어권이 양보된다면 코루틴A는 루틴의 처음부터 시작하는게 아니라 ..

Note 2017.07.10

TIL: Unity compares Objects to null implicitly

묵시적 형 변환 C,C++에서는 어떤 변수가 NULL인지 아닌지 검사하기위해 아래와 같은 조건문을 쓸 수 있다. Asdf* asdf = new Asdf; if (asdf) { // do sth } delete asdf; 이 동네에선 조건문 안에 있는 수식을 평가해서 나온 값이 0이면 FALSE, 그게 아니면 TRUE로 판단하기 때문이다. Java나 C#같은 고오급 언어에선 다르다. if 조건문 안에 bool 타입의 수식이 들어가야 한다. 그냥 C,C++에서 하던대로 쿨하게 if 조건 안에 변수 하나만 명시하는건 그 변수가 bool 타입이 아닌 이상 불가능하다. Asdf asdf = new Asdf(); if (asdf == null) { // do sth } if (asdf) { // error: Can..

Note 2017.06.29