{"id":18238562,"url":"https://github.com/solutena/observable","last_synced_at":"2026-04-30T14:36:59.814Z","repository":{"id":257888861,"uuid":"873106364","full_name":"solutena/Observable","owner":"solutena","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-20T05:05:55.000Z","size":95,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-08T16:11:38.259Z","etag":null,"topics":["design-pattern","observable","observablecollection","observer-pattern","unity","unitypackage"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solutena.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-15T15:58:30.000Z","updated_at":"2025-02-20T05:05:58.000Z","dependencies_parsed_at":"2024-11-12T20:22:50.767Z","dependency_job_id":"a4824da4-24b2-48fb-811b-d6501ae117eb","html_url":"https://github.com/solutena/Observable","commit_stats":null,"previous_names":["solutena/observable"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solutena%2FObservable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solutena%2FObservable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solutena%2FObservable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solutena%2FObservable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solutena","download_url":"https://codeload.github.com/solutena/Observable/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247878021,"owners_count":21011158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-pattern","observable","observablecollection","observer-pattern","unity","unitypackage"],"created_at":"2024-11-05T03:06:03.350Z","updated_at":"2026-04-30T14:36:59.773Z","avatar_url":"https://github.com/solutena.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Observable\n\n옵저버 패턴을 구현하여 값이 변경될 때 구독자들에게 알림을 보내는 기능을 제공합니다.\n\n# 설치\n\n![image](https://github.com/user-attachments/assets/174185db-6090-42e7-93b7-01b3f0701315)\n\n1. URL 복사\n\n![image](https://github.com/user-attachments/assets/f4060f1d-94aa-4a49-b001-e7a5e01316e1)\n\n2. 패키지 매니저에서 Add Package from Git URL 선택\n\n![image](https://github.com/user-attachments/assets/a4af4faf-2741-48ea-b525-29bc0a09688b)\n   \n3.  복사한 URL로 설치\n\n# Observable\\\u003cT\\\u003e\n\n`Observable\u003cT\u003e` 클래스는 T 타입의 값에서 변경 사항을 추적할 수 있는 간단한 방법을 제공합니다.\n\n값이 업데이트될 때 이벤트를 발생시키는 메커니즘이 포함되어 있습니다.\n\n직렬화를 지원합니다.\n\n### 이벤트\n값이 변경되면 `OnChanged` 이벤트가 호출됩니다.\n\n이 이벤트는 이전 값과 현재 값을 전달합니다.\n\n### 암시적 변환\nObservable\u003cT\u003e 객체를 T 타입으로 암시적으로 변환합니다.\n```C#\nvar o = new Observable\u003cint\u003e(10);\nint i = o;\n```\n\n## 예제\n```C#\nvar o = new Observable\u003cint\u003e(10);\n\n//구독\no.OnChanged += (prev, current) =\u003e\n{\n    Console.WriteLine($\"Value changed from {prev} to {current}\");\n};\n\no.Value = 20; // 출력: Value changed from 10 to 20\n```\n\n# IObservableCollection\n`ObservableDictionary\u003cTKey, TValue\u003e`\n\n`ObservableHashSet\u003cT\u003e`\n\n`ObservableList\u003cT\u003e`\n\n지원되는 컬렉션입니다.\n\n직렬화를 지원합니다.\n\n### 이벤트\n컬렉션이 변경되면 이벤트가 호출됩니다.\n\n`OnAddedChanged` : 추가된 요소를 전달합니다.\n\n`OnRemovedChanged` : 삭제된 요소를 전달합니다.\n\n`OnUpdatedChanged` : 변경된 요소를 전달합니다. (ObservableList, ObservableDictionary)\n\n`OnCollectionChanged` : 변경된 컬렉션을 전달합니다.\n\n### 함수\n`TriggerAddedChanged(T item)` : OnAddedChanged 이벤트를 강제로 호출합니다.  \n\n`TriggerRemovedChanged(T item)` : OnRemovedChanged 이벤트를 강제로 호출합니다.  \n\n`TriggerUpdatedChanged(T item)` : OnUpdatedChanged 이벤트를 강제로 호출합니다.  \n\n`TriggerCollectionChanged()` : OnCollectionChanged 이벤트를 강제로 호출합니다.\n\n`Initialize` : 이벤트를 호출하지 않고 컬렉션을 새로 덮어씁니다.\n\n### 암시적 변환\n컬렉션을 해당 타입으로 암시적으로 변환합니다.\n```C#\nObservableList\u003cint\u003e o = new();\nList\u003cint\u003e l = o;\n```\n\n## 예제\n```C#\nObservableList\u003cint\u003e o = new();\no.OnAddedChanged += OnAddedChanged;\n\nvoid OnAddedChanged(int item)\n{\n}\n```\n이벤트를 자동완성하면, 알맞은 타입으로 구성되어\n\n타입 오류를 방지하고 편리하게 사용할 수 있습니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolutena%2Fobservable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolutena%2Fobservable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolutena%2Fobservable/lists"}