2017년 6월 20일 화요일

[Links] Unit Testing asynchronous code

좀 옛날 글이긴 하지만
VisualStudio에서 MSTest로 unit test case를 작성할 때
Asynchronous code에 대해서 고려해야할 사항을 상세 하게 정리한 글이다.

Async Programming : Unit Testing Asynchronous Code
: https://msdn.microsoft.com/ko-kr/magazine/dn818493.aspx

Async Programming : Unit Testing Asynchronous Code: Three Solutions for Better Tests
https://msdn.microsoft.com/ko-kr/magazine/dn818494.aspx


사실 요즘 VS에서 MSTest로 async method에 대해서 unit test case를 작성하려면
단순히 public async Task XXXX() prototype으로만 작성하면
test framework에서 Task가 끝날 때 까지 기다리므로 문제는 없다.

하지만 asychronous 하게 testing을 하기 위해서
어떤 방법들을 사용할 수 있는지에 대해서 한번쯤은 봐두면 좋은것 같아
기억 차원에서 링크만 정리함.

이책 한번 도서관에 신청해서 봐야 겠음.
https://www.amazon.com/Concurrency-Cookbook-Asynchronous-Multithreaded-Programming/dp/1449367569/ref=sr_1_1?ie=UTF8&qid=1496741393&sr=8-1&keywords=Concurrency+in+C%23+Cookbook

이책도
http://www.yes24.com/24/goods/25466870?scode=032&OzSrank=1

2017년 6월 1일 목요일

C# struct, value type, reference type

C++에서는 Class와 Struct가 거의 차이가 없어
method가 필요없는 data model은 struct로 지정해서 사용하던게 버릇이었는데
C#에서는 좀 상황이 달라서 찾아봄.

일단 C#에서의 Struct와 Class의 차이점은 아래 정리하였음.
http://charlie0301.blogspot.kr/2016/11/struct-vs-class-in-c.html

간단히 정리하면
https://msdn.microsoft.com/ko-kr/library/aa664471(v=vs.71).aspx

구조체는 여러 가지 중요한 점에서 클래스와 다릅니다.
  • 구조체는 값 형식입니다(11.3.1 단원).
  • 모든 구조체 형식은 암시적으로 클래스 System.ValueType에서 상속됩니다(11.3.2 단원).
  • 구조체 형식의 변수에 대입이 이루어지면 지정되는 값이 복사됩니다(11.3.3 단원).
  • 구조체의 기본값은 모든 값 형식 필드를 기본값으로 설정하고 모든 참조 필드를 null로 설정했을 때 생성되는 값입니다(11.3.4 단원).
  • Boxing과 unboxing 연산은 구조체 형식과 object 간의 변환에 필요합니다(11.3.5 단원).
  • this의 의미는 구조체의 경우 다릅니다(11.3.6 단원).
  • 구조체에 대한 인스턴스 필드 선언은 변수 이니셜라이저를 포함할 수 없습니다(11.3.7 단원).
  • 구조체는 매개 변수가 없는 인스턴스 생성자를 선언할 수 없습니다(11.3.8 단원).
  • 구조체는 소멸자를 선언할 수 없습니다(11.3.9 단원).


요약 첫줄에도 나오듯이 구조체는 value type이라서
구조체 변수간 대입 시 변수의 값을 전달하게 된다는것이 중요.

그럼 자연스레 드는 궁금증은 call by reference, call by value일 것 같은데..
아래 링크를 정독하면 아주 도움이 된다.

http://www.yoda.arachsys.com/csharp/parameters.html

모든 상황에서 다 맞는 것은 아니지만 ...

변수간 대입은 value type이면 value를
reference type이면 reference를...

함수 parameter일 경우
기본적으로 call by value인데
value type의 value는 value, reference type의 value는 reference를 (왠지 말장난같은..)

정도로 요약하여 생각하면 되지 않을까 생각하지만

case마다 딱 들어맞지 않아 한번 정독이 꼭 필요함!!!