본문 바로가기

전체 글252

[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.
[C#] required, Nullable 파헤치기(feat. 거슬리는 초록 밑줄) ✍️vs2022로 c# 코드 작성 중 아래와 같이 단순한 배열 선언에 초록색 밑줄이 나오길래 거슬려서 확인해 보았다. ※ 커서를 가져다 대본 결과 위와 같은 문구가 나왔고, 이 거슬리는 밑줄을 없애기 위해선 두 가지 방법이 있었다. 1. required 키워드 사용 2. Nullable로 선언 밑줄의 원인은 설명에 써 있는 것과 같이 해당 배열의 값이 null이 올 수 있는지 아닌지가 확실하지 않아서 나오는 경고 였고. C# 11 이상의 버전에서만 보이는 경고 문구였다. 따라서 배열에 값이 null이 올 수 없게 하려면 required 키워드와 함께 선언하는 첫 번째 방법을 사용하면 되고, null이 올 수 있도록 하려면 두 번째 방법인 Nullable로 선언하면 된다. 위는 required와 Nulla.. 2023. 12. 8.
[C#/Unity][디자인패턴] 커맨드 패턴(Command Pattern) 1. 커맨드 패턴이란? - 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴. - 객체의 행위(메서드)를 클래스로 만들어 캡슐화하는 패턴. - 요청을 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하는 행동 패턴. - 요청의 실행을 지연하거나 대기열에 넣을 수 있도록 하고, 또 실행 취소할 수 있는 작업도 지원한다. - 요청을 객체의 형태로 캡슐화하여 나중에 이용할 수 있도록 메서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 해주는 패턴. 2. 커맨드 패턴을 사용하는 경우 - 요청이 서로 다른 사용자, 시간 또는 프로젝트에 따라 달라질 수 있을 경우 - 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고 싶은 .. 2023. 12. 7.
[C#/Unity][디자인패턴] 브릿지 패턴(Bridge Pattern) 1. 브릿지 패턴이란? - 클래스의 구현 계층과 추상 계층을 분리하여 각자의 독립적인 변형을 용이하게 한다. - 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 한다. - 객체의 확장성을 향상시키기 위한 패턴. 2. 브릿지 패턴을 사용하는 경우 - 클래스의 내용과 클래스에서 처리하는 일이 자주 변화하는 경우 - 기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가 해야하는 경우 - 부모 추상 클래스가 기본 규칙 세트를 정의하고 구체적인 클래스가 추가 규칙을 추가하고 싶은 경우 - 객체에 대한 참조가 있는 추상 클래스가 있고 각 구체적인 클래스에서 정의될 추상 메서드가 있는 경우 3. 브릿지 패턴의 장점 - 새로운 인터페이스를 정의하여 기존 프로그램의 변경없이 기능을 확장할.. 2023. 12. 5.
[C#/Unity][디자인패턴] 프록시 패턴(Proxy Pattern) 1. 프록시 패턴이란? - 어떤 객체를 사용하고자 할 때, 객체를 직접적으로 참조 하는것이 아니라, 해당 객체를 대행(대리, proxy)하는 객체를 통해 대상 객체에 접근하는 방식을 사용하는 패턴. - 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있다. - 원래 객체에 대한 접근을 제어할 수 있어, 요청이 들어와 원래 객체에 전달되기 전이나 후에 무언가를 수행할 수 있다. - 대리자로써 작업 수행을 요청하면 처리 후 그 결과를 알려주는 패턴. - 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴. - 상속받은 인터페이스의 클래스 내부에서 같은 인터페이스를 상속받은 인스턴스를 생성하는 패턴.. 2023. 12. 4.
[Unity] 유니티 AirSim 적용(dll 파일 설치) 2023.12.01 기준 1. 유니티 설치 2. airsim 파일 다운 GitHub - microsoft/AirSim: Open source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI & Res Open source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI & Research - GitHub - microsoft/AirSim: Open source simulator for autonomous vehicles built on Un... github.com 3. 유니티로 airsim 실행 - A.. 2023. 12. 1.
[C#/Unity][디자인패턴] 경량 패턴(Flyweight Pattern) 1. 경량 패턴이란? - 재사용 가능한 객체 인스턴스를 공유시켜 메모리 사용량을 최소화하는 구조 패턴. - 한 개의 고유 상태를 다른 객체들에서 공유하게 만들어 메모리 사용량을 줄이는 패턴 - 내용이 같은 객체가 이미 있으면 새로 객체를 만들지 않고, 내용이 같은 기존 객체를 공유한다. - 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하며 사용하도록 메모리 사용량을 최소화하는 패턴. - 반복된 데이터에 대해 하드웨어의 부담을 줄여주는 패턴 2. 경량 패턴을 사용하는 경우 - 메모리를 최소한으로 사용해야하는 경우 - 공통적인 인스턴스를 많이 생성하는 로직이 포함된 경우 - 생성된 객체가 오래도록 메모리에 상주하며 사용되는 횟수가 많은 경우 - 어플리케이션에 의해 생성되는 객체의 수가 많아.. 2023. 12. 1.
[C#/Unity][디자인패턴] 퍼사드 패턴(Facade Pattern) 1. 퍼사드 패턴이란? - 복잡한 객체 구조에 대한 간략화된 인터페이스를 클라이언트에게 제공하는 패턴 - 사용자가 굳이 알아야 할 필요가 없는 내부 구조 등을 숨기는 패턴 - 클래스 라이브러리와 같은 대규모의 코드를 사용하기 위한 간략한 인터페이스를 제공하는 패턴 - 어떤 서브시스템의 인터페이스에 대한 통합된 인터페이스를 제공하는 패턴 - '건물의 정면' 이라는 ' Facade'의 뜻처럼, '복잡한 시스템의 앞면' 이라는 의미로 사용된다. 2. 퍼사드 패턴을 사용하는 경우 - 수십 가지의 기능이 있는 정교한 라이브러리와 통합해야 하지만 그 기능의 극히 일부만을 필요로 하는 경우 - 하위시스템의 각 계층에 대한 진입점을 정의하기 위해 사용 - 복잡한 시스템을 간편하게 다루고 싶을 때 사용 3. 퍼사드 패턴.. 2023. 11. 30.
[C#/Unity][디자인패턴] 데코레이터 패턴(Decorator Pattern) 1. 데코레이터 패턴이란? - Decorate의 의미 '꾸민다'의 뜻 그대로 어떤 객체를 꾸며주기 위해 필요한 여러 요소들을 추가해주는 패턴. - 객체에 추가 요소를 동적으로 더할 수 있는 디자인 패턴. - 개발 확장에 있어 base 클래스 밑에 서브 클래스를 만들어 확장시킬 때, 데코레이터 패턴을 사용하면 서브 클래스를 만들어 확장할 때보다 더 확장성 있게 구현할 수 있음. - 기본 기능에 추가할 수 있는 많은 종류의 부가 기능에서 파생되는 다양한 조합을 동적으로 구현할 수 있는 패턴. - 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있도록 해주는 패턴. - 각각이 개별적인 객체면서 parent에선 멤버인 child 객체를 사용할 수 있고, 관련 기능들을 위임하여 실행하는 패턴. - OCP .. 2023. 11. 29.
[C#/Unity][디자인패턴] 컴포지트 패턴(Composite Pattern) 1. 컴포지트 패턴이란? - 사용자가 단일 객체와 복합 객체 모두 동일하게 처리할 수 있음. - 객체들의 관계를 트리구조로 구성하여 부분-전체 계층을 표현하고 각 구조들을 개별 객체들처럼 다룰 수 있는 구조패턴. - 여러 객체의 합성(composite)을 제어할 수 있도록 하는 객체를 정의 - 동일한 타입의 자식 객체들을 관리하는 동일한 타입의 컴포지트 객체를 생성하여 관리하는 객체를 통해 자식 객체들에게 접근하는 패턴 - 복합 객체(Composite)와 단일 객체(Leaf)를 동일한 컴포넌트로 취급하여, 클라이언트에게 이 둘을 구분하지 않고 동일한 인터페이스를 사용하도록 하는 패턴. 2. 컴포지트 패턴을 사용하는 경우 - 전체-부분의 관계를 갖는 객체들 사이의 관계를 정의할 경우 - 여러 개체를 동일한.. 2023. 11. 28.
[Unity] 유니티 Terrain에 지형 데이터 .tif 넣는 방법 - 유니티에서는 최대 4K까지 지원하는 듯 1. 지형 elevation파일(.tif)과 텍스쳐 이미지 파일(.tif)을 받는다. 2. 유니티 새로운 씬 생성 3. Hierarchy에서 Terrain 생성 4. 스크립트 작성(높이값을 반전) using UnityEngine; public class SetTerrainHeight : MonoBehaviour { public Texture2D HeightMap; [ContextMenu("SetHeight")] public void SetHeight() { TerrainData terrainData = GetComponent().terrainData; int terrainWidth = terrainData.heightmapResolution; int terrai.. 2023. 11. 27.