본문 바로가기

[C#] Mixin 흉내내기 C#은 믹스인을 지원하지 않고, Java와 같은 인터페이스 기반의 다중 상속을 선택했다. 하지만 이 방법은 '구현'을 상속하지 못한다는 점에서 굉장히 불편한데, 아래의 예제에 어떤 경우에 불편한지 예제를 작성해 보았다. IPrintable 인터페이스는 디버그 용도 등을 위해 해당 클래스의 모든 프로퍼티들을 콘솔에 출력하기 위한 용도로 만들어졌다. 여기서 짜증나는 점은, Print 메소드는 무조건 직접 구현해야 한다는 것이다. 알다시피 C#은 런타임에 모든 프로퍼티의 이름, 값들을 리스트로 가지고있다. 그렇기에 사실 저렇게 직접 하나하나 다 찍어야 할 필요는 전혀 없다. 누가 대신 찍어줄수도 있다는 말이다. 위의 루비 예제는 mixin을 이용하여 모든 인스턴스 멤버의 값을 출력하는 Printable을 구현.. 더보기
[C#] Thread.Sleep의 await(Task) 버전 static async void Foo() { Console.WriteLine("hello"); await Task.Delay(1000); Console.WriteLine("world"); // 1 초후에 출력됨 } static void Main(string[] args) { Foo(); while (true) { Console.Read(); } } 더보기
[Ruby] select, map, collect select콜렉션에서 주어진 조건과 일치하는 모든 항목의 콜렉션을 반환한다. puts [1,2,3,4,5,6].select {|x| x >= 3 } # 3 4 5 6 collect콜렉션의 모든 원소들을 가공해서 새로운 콜렉션을 반환한다. puts [1,2,3].map {|x| x * x } # 1 4 9 mapmap은 collect의 alias이며, 다른 언어에서 사용하는 메소드와 네이밍을 맞춰서 편리성을 제공하기 위해 만들어진 메소드이다. 더보기