태그 보관물: messenger

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

계속 읽기