ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 24년 6월 3일 TIL
    공부 기록 2024. 6. 3. 22:28

    옵저버 패턴 (Observer Pattern)

    설명

    옵저버 패턴은 객체 간 일대다(one-to-many) 관계를 정의하여, 한 객체의 상태가 변경될 때 그 상태 변화를 모든 종속 객체에 통보하고 자동으로 갱신되도록 하는 패턴이다. 이 패턴은 주로 이벤트 핸들링 시스템에서 사용 된다.

    구성 요소

    1. Subject (주제): 상태를 관리하고, 옵저버들을 등록하거나 제거하는 역할
    2. Observer (옵저버): 주제의 상태 변화를 관찰하고, 상태가 변경될 때 실행되는 업데이트 메서드를 정의

    장점

    • 느슨한 결합: 주제와 옵저버가 독립적이므로, 주제의 변경이 옵저버에 직접적인 영향을 주지 않는다.
    • 확장성: 새로운 옵저버를 쉽게 추가할 수 있다.
    • 유연성: 주제의 변경을 자동으로 통보받아, 다양한 반응을 구현할 수 있다.

    단점

    • 복잡성 증가: 다수의 옵저버가 등록될 경우, 관리가 복잡해질 수 있다.
    • 성능 문제: 많은 옵저버가 등록되어 있을 때, 상태 변경 시 많은 옵저버에게 통보해야 하므로 성능 저하가 발생할 수 있다.

    싱글턴 패턴 (Singleton Pattern)

    설명

    싱글턴 패턴은 클래스의 인스턴스가 오직 하나만 생성되고, 이 인스턴스에 전역적으로 접근할 수 있도록 하는 패턴이다. 주로 시스템 내에서 단일 객체가 필요한 경우에 사용 된다.

    구성 요소

    1. Private Constructor: 외부에서 인스턴스를 생성하지 못하도록 한다.
    2. Static Variable: 유일한 인스턴스를 저장하는 변수다.
    3. Public Static Method: 유일한 인스턴스를 반환하는 메서드

    장점

    • 단일 인스턴스 보장: 특정 클래스의 인스턴스가 하나만 생성되도록 보장
    • 전역 접근: 어디서든 인스턴스에 접근할 수 있다.
    • 자원 절약: 동일한 인스턴스를 재사용하여 자원을 절약할 수 있다.

    단점

    • 테스트 어려움: 전역 상태를 가지므로, 유닛 테스트 시 격리하기 어렵다.
    • 의존성 문제: 싱글턴 인스턴스에 강하게 의존하게 되어 코드가 유연성을 잃을 수 있다.
    • 멀티스레딩 문제: 멀티스레드 환경에서 싱글턴을 안전하게 구현하기 어렵다.

    옵저버 패턴과 싱글턴 패턴 비교

    특성옵저버 패턴싱글턴 패턴

    역할 객체 간의 의존성을 관리하고 통보 클래스의 단일 인스턴스 보장
    구성 요소 주제(Subject), 옵저버(Observer) private 생성자, static 인스턴스 변수, public static 메서드
    장점 느슨한 결합, 확장성, 유연성 단일 인스턴스 보장, 전역 접근, 자원 절약
    단점 복잡성 증가, 성능 문제 테스트 어려움, 의존성 문제, 멀티스레딩 문제
    적용 예 이벤트 핸들링 시스템, 데이터 바인딩 설정 클래스, 로그 관리 클래스
    유연성 상대적으로 높음 상대적으로 낮음
    테스트 용이성 비교적 용이 어려움

    결론

    • 옵저버 패턴: 객체 간의 통신을 느슨하게 결합하여, 상태 변경을 통보하는 시스템에서 유용하다. 특히 이벤트 핸들링 시스템에서 유용함.
    • 싱글턴 패턴: 시스템 전역에서 단일 인스턴스가 필요한 경우 유용, 주로 설정 클래스나 로그 클래스 등에서 사용된다.

    옵저버 패턴과 싱글턴 패턴은 각각 특정한 상황에서 유용하며, 두 패턴 모두 설계 패턴의 중요한 부분을 차지한다. 각 패턴의 장단점을 이해하고, 적절한 상황에서 사용하는 것이 중요하다고 한다.

    '공부 기록' 카테고리의 다른 글

    24년 6월 5일 TIL  (0) 2024.06.05
    24년 6월 4일 TIL  (0) 2024.06.04
    24년 5월 31일 TIL  (0) 2024.05.31
    24년 5월 30일 TIL  (0) 2024.05.30
    24년 5월 29일 TIL  (1) 2024.05.29
Designed by Tistory.