{"id":27699549,"url":"https://github.com/zkdlu/design-pattern","last_synced_at":"2025-06-10T12:35:25.282Z","repository":{"id":108917978,"uuid":"341795592","full_name":"zkdlu/design-pattern","owner":"zkdlu","description":null,"archived":false,"fork":false,"pushed_at":"2021-03-08T11:36:34.000Z","size":28,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-25T17:29:50.584Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","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/zkdlu.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,"zenodo":null}},"created_at":"2021-02-24T05:59:46.000Z","updated_at":"2021-03-15T11:40:10.000Z","dependencies_parsed_at":"2023-06-25T21:21:15.225Z","dependency_job_id":null,"html_url":"https://github.com/zkdlu/design-pattern","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkdlu%2Fdesign-pattern","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkdlu%2Fdesign-pattern/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkdlu%2Fdesign-pattern/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkdlu%2Fdesign-pattern/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zkdlu","download_url":"https://codeload.github.com/zkdlu/design-pattern/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkdlu%2Fdesign-pattern/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259076489,"owners_count":22801760,"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":[],"created_at":"2025-04-25T17:24:12.840Z","updated_at":"2025-06-10T12:35:25.249Z","avatar_url":"https://github.com/zkdlu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 생성 패턴\n - 객체 생성에 관련된 패턴\n - 객체의 생성과 조합을 캡슐화 해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공\n\n## 추상 팩토리 (Abstract Factory)\n - 서로 관련이 있는 객체들을 묶어서 팩토리 클래스로 만들고, 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어 객체를 생성하는 패턴\n## 빌더 (Builder)\n- 인스턴스를 생성자를 통해 직접 생성하지 않고, 빌더라는 내부 클래스를 통해 간접적으로 생성하게 하는 패턴\n## 팩토리 메서드 (Factory Method)\n - 조건에 따른 객체 생성을 팩토리 클래스로 위임하여, 팩토리 클래스에서 객체를 생성하는 패턴\n## 프로토타입 (Prototype)\n - 원본(Prototype)을 만들어 놓고 원본 객체를 복사하여 사용하는 패턴\n## 싱글턴 (Singleton)\n - 클래스 내에서 인스턴스가 단 하나뿐임을 보장하는 패턴\n\n# 구조 패턴\n - 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴\n - 예를 들어 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나, 객체들을 서로 묶어 새로운 기능을 제공하는 패턴\n\n## 어댑터 (Adapter)\n - 서로 비슷한 기능인데 사용 방법이 달라 호환성이 없는 클래스를 래핑해 사용자에게 같은 인터페이스를 제공하는 패턴\n## 브릿지 (Bridge)\n - 추상적 개념 클래스를 정의하고 이를 통해 구체적 기능을 사용하는 패턴\n## 컴퍼지트 (Composite)\n - 단일 객체와 복합 객체를 같은 방법으로 사용할 수 있게 하는 패턴\n## 데코레이터 (Decorator)\n - 단위 기능을 하는 클래스를 혼합하여 여러 기능을 사용할 수 있게 하는 패턴\n## 퍼샤드 (Facade)\n - 복잡한 호출과정을 대신 처리해주는 wrapper 객체를 따로 만드는 것\n## 플라이웨이트 (Flyweight)\n - 다수의 객체에 공통적인 데이터를 별도로 관리하여 메모리 효율을 높여주는 패턴\n## 프록시 (Proxy)\n - 객체 스스로가 직접 처리하지 않고 중간에 다른 '숨겨진' 객체를 통해 처리하는 패턴\n 1. 원격지 프록시\n  - 서버 측에 있는 실제 객체와 같은 인터페이스를 갖는 원격지 객체를 제공하여 서버측에 있는 실제 객체를 제어하는 패턴\n 2. 가상 프록시\n  - 시간이 많이 걸리는 작업을 비동기적으로 사용하여주는 패턴\n 3. 보호용 프록시\n  - 사용자가 객체의 특정 행위를 수행할 수 있는 권한을 다르게 해주는 패턴\n\n# 행위 패턴\n - 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴\n - 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지와 객체 사이읭 결합도를 최소화 하는 것에 중점\n\n## 책임연쇄 (Chain of Responsibility)\n - 명령하는 객체와 처리하는 객체를 일반화 하고 서로 연결하여, 명령객체에서 보낸 메시지가 내부적으로 연결된 처리 객체에 전달되도록 하는 패턴\n## 명령 (Command)\n - 명령을 내리는 곳에서 수행할 명령 자체를 객체로 만들어 잔달하여, 해당 명령을 수행하는 패턴\n## 인터프리터 (Interpreter)\n - 일련의 규칙으로 정의된 문법적 언어를 해석하는 패턴\n## 반복자 (Iterator)\n - 컬렉션의 내부 표현을 외부에 노출하지 않고, 컬렉션의 요소들을 차레대로 접근하는 패턴\n## 중재자 (Mediator)\n - 객체들간의 상호작용이 복잡할 때 중간자를 정의하여 관계를 단순화 하는 패턴\n## 메멘토 (Memento)\n - 객체의 상태를 기록해 놓고 필요한 경우 복원할 수 있는 패턴\n## 옵저버 (Observer)\n - 다른 객체들의 상태가 변하는것을 감시하는 패턴\n## 상태 (State)\n - 객체의 상태에 따라 행동을 다르게 하는 패턴\n## 전략 (Strategy)\n - 하나의 문제를 해결하기 위한 여러 객체를 일반화 하여 독립적으로 사용할 수 있게 하는 패턴\n## 템플릿 메서드 (Template method)\n - 행위에 대한 약속을 기반 클래스에서하고 구체적 구현을 파생 클래스에서 하는 패턴\n## 방문자 (Visitor)\n - 객체 종류에 따라 다른 처리를 하는 패턴","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkdlu%2Fdesign-pattern","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzkdlu%2Fdesign-pattern","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkdlu%2Fdesign-pattern/lists"}