Mediator Pattern vs Observer Pattern

Mediator Pattern Vs Observer Pattern Mediator 패턴과 Observer 패턴은 객체 간 통신을 관리하는 디자인 패턴이지만, 그 접근 방식과 용도에 차이가 있다. Mediator 패턴: 객체 간의 복잡한 상호작용을 캡슐화하여 중재자 객체를 통해 간접적으로 통신하게 하는 패턴 객체 간 결합도를 낮추고 상호작용을 중앙 집중화함 복잡한 다대다 관계를 단순화하는 데 유용 Observer 패턴: 객체의 상태 변화를 관찰하는 관찰자들에게 자동으로 알리는 패턴 주체 객체와 다수의 관찰자 객체 간의 일대다 관계를 정의함 상태 변경에 대한 효율적인 알림 메커니즘을 제공 Mediator 패턴은 객체 간 복잡한 상호작용을 중재자를 통해 관리하여 객체 간의 결합도를 줄이고 상호작용 로직을 집중시키는 데 적합하다. Observer 패턴은 상태 변화에 따른 자동 알림 및 실시간 동기화를 구현할 때 적합하며, 이벤트 기반 시스템에 자주 사용된다. 두 패턴 모두 객체 간의 결합도를 낮추는 데 기여하지만, Mediator는 상호작용을 캡슐화하고 Observer는 상태 변경에 반응하는 방식으로 목적과 활용 분야가 다르다. ...

September 24, 2024 · 3 min · Me

Object Pooling

Object Pooling Object Pool 은 객체 생성·파괴 비용이 높고, 재사용 가능한 객체가 많은 상황에서 성능과 메모리 효율을 위해 활용하는 디자인 패턴이다. 프레임워크나 라이브러리 수준에서 DB 커넥션, 스레드, 게임용 그래픽 객체 등을 미리 할당해 두고 클라이언트 요청 시 재활용한다. 내부적으로는 객체 수명 관리, 동기화, 재설정 (clean-up) 등을 담당하는 구조를 가지며, 동시성 환경에서의 안전성을 확보하기 위한 lock 또는 blocking queue 구현이 필요하다. 핵심 개념 Object Pooling(오브젝트 풀링): 객체 생성 비용이 큰 경우, 미리 객체를 생성해 풀에 저장하고 필요할 때마다 재사용하는 기법. 풀 (Pool): 재사용 가능한 객체들이 저장되는 공간. 객체 대여/반환: 필요 시 풀에서 객체를 꺼내 사용하고, 사용이 끝나면 다시 풀에 반환. 생성/소멸 오버헤드 감소: 객체 생성/소멸 비용이 큰 경우 성능 저하를 막음. 리소스 효율화: 메모리, 네트워크, 파일 등 리소스 사용 최적화. 상태 초기화 (Reset/Clean-up): 반환 시 객체 내부 상태를 초기화하여 다음 사용을 안전하게 보장. 최대 풀 크기 관리: 필요한 경우 pool 제한, 초과 시 대기·예외 처리. 동시성 제어: 멀티스레드 환경에서 race 조건 방지를 위한 동기화가 필수. 실무 연관성 실무에서는 데이터베이스 커넥션, 스레드, 네트워크 소켓 등 생성/소멸 비용이 큰 리소스 관리에 오브젝트 풀링이 필수적으로 사용된다. 이를 통해 시스템의 응답성, 확장성, 안정성을 높이고, 불필요한 메모리 낭비와 GC 부담을 줄일 수 있다. ...

June 24, 2025 · 19 min · Me

지연 초기화(Lazy Initialization)

지연 초기화 (Lazy Initialization) 4. 전체 개요 (250 자 내외) 지연 초기화는 성능 최적화를 위한 핵심 디자인 패턴으로, 객체 생성을 지연시켜 메모리 사용량을 줄이고 애플리케이션 시작 시간을 단축한다. 프록시 패턴을 활용한 구현, 스레드 안전성 보장, ORM 에서의 지연 로딩, 웹에서의 이미지 지연 로딩 등 다양한 영역에서 활용된다. 적절한 사용 시 성능 향상을 가져오지만, 잘못 사용하면 오히려 성능 저하를 일으킬 수 있어 신중한 적용이 필요하다. 단, 멀티스레드 환경의 동시 초기화 이슈와 디버깅 난이도 증가를 고려해야 한다. ...

December 18, 2024 · 26 min · Me