태그 보관물: delegate

Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – II

시작하기

지난 포스트에서 함수의 강한 참조를 사용하는 메신저 구현 방법과 이 방법을 사용할 때 변수에 저장되지 않는 개체가 가비지 컬렉션에서 생존하게 되는 현상을 살펴봤습니다. 이러한 현상이 항상 문제라고 볼 수는 없지만 그것을 기대하지 않은 상황에서는 곤란해질 수 있습니다. 이번 포스트에서는 약한 참조를 사용해 메시지 구독이 가비지 컬렉션에 영향을 주지 않도록 하는 방법을 알아봅니다.

I'm too weak. Don't kill me.

  1. Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – I
  2. Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – II

계속 읽기

Advertisements

Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – I

시작하기

요즘 자주 접할 수 있는 프로그래밍 언어에 대한 키워드 중 하나가 함수형 프로그래밍입니다. 꼭 함수형 언어가 아니라도 많은 언어들이 함수형 프로그래밍 특징들을 스펙에 포함하고 있습니다. 올해 초에는 Java 스펙에도 람다가 추가되었고 C# 2.0에 클로저(closure)가 추가된 것이 벌써 10년전, 저 역시 계속 함수형 프로그래밍을 공부하고 있습니다. 그런데 언어별 함수형 프로그래밍 특징들의 구현 방법에 대해 잘 모르면 낭패를 보는 경우가 가끔 있습니다. 지금부터 다룰 시리즈에서는 JVM이나 CLR 같은 Mark and Sweep 가비지 컬렉션을 사용하는 플랫폼에서 주의해야 할 내용 몇 가지를 Mediator 패턴을 사용해 소개합니다. 언어는 C#을 기준으로 설명하지만 개념적인 내용은 람다를 사용하는 Java 프로그래머들도 꼭 한 번 고민해 볼 내용입니다.

총 3개의 포스트로 진행됩니다. 이번 포스트에서는 강한 참조로 구현되는 메신저에서 발생할 수 있는 문제를 다루고 두번째 포스트는 약한 참조를 사용해 이 문제를 해결하는 방법과 실제로 약한 참조를 사용하는 메신저들을 분석합니다. 마지막 세번째 포스트에서는 약한 참조를 사용한 구현이 가진 문제점을 살펴보고 다시 강한 참조로 돌아가 Rx(Reactive Extensions)를 사용하는 방법을 알아봅니다.

  1. Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – I
  2. Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – II

계속 읽기

동적 Linq 연산 #2 – Where

지난 포스트에 이어…

지난 포스트에서 런타임에 동적으로 결정되는 속성 이름을 사용한 시퀀스 정렬과 CreateDelegate 메서드를 사용한 최적화 방법에 대해 살펴봤습니다. 정렬 작업과 더불어 Linq에서 가장 많이 사용되는 연산은 필터링 작업입니다. 이번 포스트에서는 Where 연산에 속성 이름을 적용하는 방법을 정리하겠습니다.

계속 읽기

동적 Linq 연산 #1 – OrderBy

배경

최근에 codeproject.com에서 정렬 키 속성 이름을 입려받아 동적으로 시퀀스에 OrderBy 연산을 적용하는 방법에 대한 포스트를 접했습니다. 데이터를 보여주고 분석하는 프로그램에서 동적으로 속성을 입력받는 상황은 흔히 발생합니다. 실제로 몇 주 전에 팀 동료로부터 서비스 프로그램에서 외부 컴포넌트에서 입력받는 값에 따라 지정된 속성으로 데이터를 필터링하는 방법에 대한 문의를 받은 적이 있습니다. 두 개의 포스트를 통해 이러한 상황에서 사용할 수 있는 정렬과 필터링 연산에 대해 정리해 봅니다.

계속 읽기