본문 바로가기

[PostSharp] ReaderWriterSynchronized PostSharp의 ReaderWriterSynchronized기능을 이용하면 원본 코드의 수정 없이 이미 작성한 클래스를 Thread-Safe 하도록 만들 수 있습니다.명심해야 할 것은, PostSharp에서 제공하는 쓰레딩 모델들은 개발 편의성이 중시되어, 직접 제어되는 락보다 좋은 성능을 내지는 못합니다. 간단하게 카운터 클래스를 만들고 여러 스레드에서 동시에 반복적으로 카운트를 올리는 작업을 수행해 보도록 하겠습니다. class Foo { private int num {get; set;} = 0; public void Increase() { num++; } public int Read() { return num; } } class Program { static void Main(string[] a.. 더보기
[Swift 2.0] guard 새로운 guard 키워드는 는 주어진 조건식이 false일 때 지정한 코드 블럭을 실행시키는 역할을 한다. guard true else { /* 실행 안됨 */ } guard false else { /* 실행됨 */ } 이 기능을 이용하여 기존에 사용하던 if let ~ 을 아주 깔끔하게 대체할 수 있는데,아래 코드와 같이 피라미드처럼 생긴 괴상한 if let ~ 의 중첩을 없엘 수 있다. (Pyramid of Doom) if let a = a { if let b = b { /* .... */ } else { return nil; } } else { return nil; } if let ~을 쓰던 코드를 guard로 정리한 모습 guard let a = a else { return nil } guard .. 더보기
[Ruby] deep_merge https://github.com/danielsdeleo/deep_merge a = { :a => [1, 2, 3] } b = { :a => [4, 5, 6] } a.merge! b p a 기본적으로 Hash에 merge를 이용하면 없는 키는 추가되지만 이미 존재하는 키는 덮어쓰게된다.따라서 위의 코드를 실행하면 아래와 같은 결과가 나오게 되는데, { :a => [4, 5, 6] } 경우에 따라서는 [4, 5, 6]이 아니라 [1, 2, 3, 4, 5, 6]이 필요할때가 있다. (훨씬 많을듯)이럴 때 사용할 수 있는 것이 deep_merge이다. deep_merge를 사용할 경우 두 해시가 자연스럽게 합쳐진다.deep_merge는 아래의 명렁어로 설치할 수 있다. gem install deep_merge.. 더보기