프로그래밍/Design Pattern 2

포이즌 필(Poison Pill) 패턴 : 멀티 스레드 프로세스를 안전하게 종료하는 방법

AI가 만들어낸 코드를 한 줄 한 줄 곱씹어 보던 중에 특이한 패턴을 발견했다.@classmethoddef stop_processor(cls): """백그라운드 처리 스레드 중지""" cls._is_running = False cls._processing_queue.put(None) 나라면 스레드를 종료하기 위해서 그냥 is_running 플래그만 False로 바꿔놨을 것 같은데, 왜 Queue에다가 None이라는 이상한 값을 집어 넣는걸까? 포이즌 필 패턴이는 안전하게 스레드를 종료하기 위한 포이즌 필(Poison Pill) 패턴이라고 한다.실생활에서 보이는 포이즌 필 패턴 예시가 재미있다.식당에서 "CLOSED" 사인을 걸어두는 것을 예로들 수 있다. 영업종료 시간이 다가오면 식당주인..

메멘토 패턴 (Memento Pattern): Rust로 구현

메멘토는 세부 구현을 드러내지 않으면서 객체의 이전 상태를 복원하고, 저장할 수 있게 해주는 디자인 패턴이다. 문제 간단한 텍스트 편집기를 개발한다고 가정해보자. 상태 스냅샷을 만드는것을 간단히 생각해보면, 저장소에 모든 필드들을 저장소에 저장하는 것을 생각할 수 있다. 하지만 아래와 같은 문제들이 있을 수 있다. 캡슐화로 인해 모든 필드들에 접근할 수 없을지도 모른다. 나중에 텍스트 편집기 클래스를 리팩토링하거나 일부 필드를 추가/제거 한다고 했을때 상태 복사를 담당하는 클래스도 같이 변경해야하는 번거로움이 생긴다. 상태를 저장 및 복원하기 위해 스냅샷도 필드들을 모두 열어놓아야(public)한다. 솔루션 메멘토 패턴은 앞에서 생각했던 것 처럼 다른 객체가 외부에서 에디터의 상태를 복사하려고 시도하는 ..