본문 바로가기

전체 글262

[C#/Unity][디자인패턴] 방문자 패턴(Visitor Pattern) 1. 방문자 패턴이란? - 알고리즘을 객체 구조에서 분리시키는 패턴. - 데이터 구조와 데이터 처리를 분리하여, 데이터 구조 내부에 방문자 클래스를 만들어 각각을 처리한다. - 방문자와 방문 공간을 분리하여, 방문 공간이 방문자를 맞이하고, 이후에 대한 행동은 방문자에게 위임하는 패턴. 2. 방문자 패턴을 사용하는 경우 - 자료구조(데이터)와 자료구조를 처리하는 로직(알고리즘)을 분리해야 할 경우 - 데이터 구조보다 알고리즘이 더 자주 바뀌는 경우 - 복잡한 객제 구조(ex. 객체 트리)의 모든 요소에 대해 작업을 수행해야 하는 경우 3. 방문자 패턴의 장점 - 구조를 수정하지 않고, 새로운 동작을 기존의 객체 구조에 추가할 수 있다. - 작업 대상(방문 공간)과 작업 항목(방문 공간을 가지고 하는 일).. 2023. 12. 31.
[C#/Unity][디자인패턴] 책임 연쇄 패턴(Chain of Responsibility Pattern) 1. 책임 연쇄 패턴이란? - 사용자의 요청을 처리함에 있어, 연쇄(Chain)적으로 연결되어있는 처리 객체(Handler)들을 이용하는 패턴. - 클라이언트로부터의 요청을 처리할 수 있는 처리 객체를 집합(Chain)으로 만들어 부여함으로 결합을 느슨하게 하기 위해 만들어진 디자인 패턴. - 일반적으로 요청을 처리할 수 있는 객체를 찾을 때까지 집합 안에서 요청을 전달한다. - 각각의 인스턴스의 책임들이 체인처럼 연쇄되어 있다는 뜻이다. - 요청을 보내는 쪽과 처리하는 쪽을 분리시키고, 요청을 보내는 쪽에서 해당 요청을 처리하는 핸들러가 어떤 구체적인 타입인지에 상관없이 디커플링된 상태에서 요청을 처리할 수 있게끔 해주는 패턴. - 클라이언트의 요청에 대한 세세한 처리를 하나의 객체가 몽땅 하는 것이 .. 2023. 12. 29.
[C#/Unity][디자인패턴] 템플릿 메서드 패턴(Template Method Pattern) 1. 템플릿 메서드 패턴이란? - 기능의 뼈대(템플릿)와 실제 구현을 분리하는 패턴. - 알고리즘의 구조를 메서드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경헚이 알고리즘을 재정의하는 패턴. - 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. - 변하지 않는 기능을 슈퍼클래스에 만들어두고, 자주 변경되면 확장할 기능은 서브클래스에 만든다. 2. 템플릿 메서드 패턴을 사용하는 경우 - 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메서드이지만 여러곳에서 다른 형태로 사용이 필요한 경우 사용. - 알고리즘의 특정 단계들만 확장할 수 있도록 하고 싶지만 알고리즘의 구조는 확장하지 못하도록 하고 싶은 경우 3. 템플릿 메서드 패턴의 장점 - 중복을 줄이고, 코드의 재사용성을.. 2023. 12. 28.
[C#/Unity][디자인패턴] 전략 패턴(Strategy Pattern) 1. 전략 패턴이란? - 정책 패턴(Policy Pattern)이라고도 불리며 특정 알고리즘을 별도로 분리하여 설계하는 방법을 말함. - 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 사용할 수 있게 해줌. - 실행 중에 알고리즘(전략)을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴. - 객체의 행위를 변경하고 싶을 때, 직접 수정하지 않고 전략이라 불리는 캡슐화된 알고리즘을 변경. - 특정한 계열의 알고리즘들을 정의하고, 각 알고리즘을 캡슐화하며, 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하도록 만든다. - 객체들이 할 수 있는 각각의 행위에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸.. 2023. 12. 28.
[C#/Unity][디자인패턴] 상태 패턴(State Pattern) 1. 상태 패턴이란? - 객체가 상태에 따라 행위를 다르게 할 때, 직접 상태를 체크하여 상태에 따른 행위를 호출하는 것이 아니라 상태를 객체화하여 필요에 따라 다르게 행동하도록 위임하는 디자인 패턴. - 상태를 조건문으로 검사해서 행위를 달리하는 것이 아닌, 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴. - 객체의 특정 상태를 클래스로 선언하고, 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의한다. - 상태란, 객체가 가질 수 있는 어떤 조건이나 상황을 의미한다. 2. 상태 패턴을 사용하는 경우 - 상태 전이를 위한 로직이 지나치게 복잡한 경우 - 현재 상태에 따라 다르게 행동하는 객체가 있는 경우 - 상태들의 수가 많고, 상태별로 코드가 자주 변경되는 경우 3. 상태 패.. 2023. 12. 27.
[C#/Unity][디자인패턴] 옵저버 패턴(Observer Pattern) 1. 옵저버 패턴이란? - 하나의 관찰 대상(객체)를 여러 개의 관찰자(옵저버)들이 관찰하고(일대다 구조), 객체의 상태 변화시 객체가 직접 옵저버들에게 상태 변화를 통지하고, 옵저버들은 해당 통지를 받는 구독 메커니즘을 가짐. - 옵저버(관찰자)들이 관찰하고 있는 대상자의 상태 변화가 있을 때마다, 대상자는 목록의 각 관찰자들에게 직접 알리고 관찰자들은 알림을 받아 조치를 취하는 행동 패턴. - 객체의 상태 변화를 관찰하는 관찰자(옵저버)들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴. - public/subscribe (발행/구독) 모델로도 알려져 있음. - 관찰자들은 수동적으로 객체에게 정보를 전달 받기만을 기다린.. 2023. 12. 27.
[개발더미][Unity] 유니티 GPU 버그 - D3D11 swapchain~ 개발 중 갑자기 아래와 같은 문구가 뜨면서 유니티가 튕겼다. 그래서 이리저리 서치해서 해결방안을 찾아냈다! 💡해결방안 디스플레이 설정 > 그래픽 > 유니티 아이콘 클릭 > 옵션 클릭 > Windows가 결정하도록 허용 -> 고성능으로 변경 cf) 이 방법으로도 안 될 경우 아래 사이트를 참조하길 바란다. Bug - Failed to present D3D11 swapchain due to device reset/removed. List of Solutions For reference, the bug report is IN-41214. So this unrecoverable error can happen for many but essentially your graphic card resets because .. 2023. 12. 26.
[자기계발][글쓰기][책] 원씽(The One Thing) 후기 클릭해주셔서 감사합니다 :) 이 글은 개인적으로 읽은 책을 기억에 남기기 위한 독서 리뷰입니다. 리뷰할 책은 [게리 켈러·제이 파파산]님의 [원씽(The One Thing)]입니다. 평점 ⭐⭐⭐⭐⭐ 5/5 (주관적인 기준입니다.) 책 정보 읽게 된 계기 이 책은 워낙 유명하기도 하고 '단 한 가지에 집중하는 것' 이라는 이 책의 모토가 지금 내 상황에 필요한 것이라는 생각이 되어 읽게 되었다. 나는 최근에 자기계발에 대한 관심을 갖게 되었고 유튜브나 책을 통해 이것저것 알아보면서 내가 담기에는 너무 방대한 정보들이 나에게 주입(?)되면서 어떤 것에 집중해야하는지에 대한 고민이 생겼고, 이를 해결하고자 이 책을 펴게 되었다. 인상 깊었던 부분 1. 초점 찾기 - 탁월한 성과는 자신의 초점을 얼마나 좁힐 수.. 2023. 12. 25.
[C#/Unity][디자인패턴] 메멘토 패턴(Memento Pattern) 1. 메멘토 패턴이란? - 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 패턴. - 객체의 상태 정보를 저장하고 사용자의 필요에 의해 원하는 시점의 데이터를 복원할 수 있는 패턴. - 캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법. 2. 메멘토 패턴을 사용하는 경우 - 어떤 객체의 상태를 변경하고, 이 변경 내용을 이후에 취소하거나 이전 상태로 복원하려고 할 때 사용 - 객체의 field, getter, setter들을 직접 접근하는 것이 해당 객체의 캡슐화를 위반할 때 사용 3. 메멘토 패턴의 장점 - 객체의 모든 정보를 외부로 노출시키지 않고 캡슐화를 지킬 수 있다. - 캡슐화를 위반하지 않고 객체의 상태 스냅샷들을 생성할 수 있다. - 코드를 단순화 시킬 수 있다. 4. 메멘토 패.. 2023. 12. 21.
[C#/Unity][디자인패턴] 중재자 패턴(Mediator Pattern) 1. 중재자 패턴이란? - 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 하는 패턴. - 소프트웨어 공학에서 어떻게 객체들의 집합이 상호작용하는지를 함축해놓은 객체를 정의 - 객체간의 상호작용을 캡슐화하는 디자인 패턴 - 중재자라는 객체 안에서 서로 다른 객체들을 캡슐화하여 객체들이 더 이상 직접적으로 상호작용하지 않고 중재자를 통해서만 커뮤니케이션하도록 함. - 객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 패턴 2. 중재자 패턴을 사용하는 경우 - 객체 간의 많은 의존관계를 가지거나 상호작용이 복잡해질 때 사용. - 일부 클래스들이 다른 클래스들과 단단하게 결합하여 변경하기 어려울 대 사용. - 타 컴포넌트들에 너무 의존하여 다른 프로그램에서 컴포넌트를 재사용할 수 없는 경우 .. 2023. 12. 20.
[C#/Unity][디자인패턴] 반복자 패턴(Iterator Pattern) 1. 반복자 패턴이란? - 일련의 데이터 집합에 대해 순차적인 접근(순회)을 지원하는 패턴. - 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공하는 패턴. - 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴. - 컬렉션의 요소들을 순회하는 패턴. 2. 반복자 패턴을 사용하는 경우 - 해시나 트리구조와 같이 저장순서가 정해지지 않고 적재된 데이터들을 순회하는 방법을 정하는 경우 - 컬렉션에 상관없이 객체 접근 순회 방식을 통일하고자 할 경우 - 컬렉션을 순회하는 다양한 방법을 지원하고 싶은 경우 - 컬렉션의 복잡한 내부 구조를 클라이언트로부터 숨기고 싶은 경우(편의 + 보안) - 데이터 저장 컬렉션 종류가 변경 가능.. 2023. 12. 16.
[C#/Unity][디자인패턴] 인터프리터 패턴(Interpreter Pattern) 1. 인터프리터 패턴이란? - 자주 등장하는 문법을 별개의 간단한 언어로 정의하고 재사용하는 패턴. - Expression이라는 추상 클래스를 만들어 사용하는 경우가 많음. - 반복되는 문제 패턴을 언어 또는 문법으로 정의하고 확장할 수 있음. - 트리구조로 인해 컴포지트 패턴과 유사한 형태를 띈다. 2. 인터프리터 패턴을 사용하는 경우 - 특정 언어 또는 문법이 반복되서 사용되는 경우 3. 인터프리터 패턴의 장점 1) 캡슐화 : 문법과 해석을 기본 로직에서 분리하여 별도의 클래스로 캡슐화되므로 모듈화되어 유지보수가 쉬워진다. 2) 쉬운 확장 : Expression 클래스에서 파생된 새로운 구현 클래스만 추가하면 DSL을 쉽게 확장할 수 있다. 3) 가독성 : 문법과 규칙을 계층구조를 이용해 명시적으로 .. 2023. 12. 12.