반응형

공부/C# 31

C#으로 작성된 디자인 패턴

https://refactoring.guru/ko/design-patterns/csharp C#으로 작성된 디자인 패턴들 요청을 요청에 대한 모든 정보가 포함된 독립 실행형 객체로 변환합니다. 이 변환은 다양한 요청들이 있는 메서드들을 인수화할 수 있도록 하며, 요청의 실행을 지연 또는 대기열에 넣을 수 있 refactoring.guru 다양한 디자인 패턴을 C# 언어로 소개하는 블로그를 소개한다. 들어가서 글을 읽다보니 설명도 잘 되어 있으며 필요한 것들은 그림으로 적재적소에 설명되어 있다. 출, 퇴근 시간 대중교통에서 읽어 보면 좋아보인다. 😎

공부/C# 2023.06.18

구조체(Struct)와 클래스(Class)의 개념과 차이

1. 구조체 C#에서 구조체는 스택에 할당된 경량 데이터 구조를 나타내는 값 유형입니다. 구조체는 관련 데이터 필드의 작은 집합을 캡슐화하는 데 사용됩니다. 참조 유형인 클래스와 달리 구조체는 값 유형으로, 구조체 변수가 선언된 메모리 위치에 직접 데이터를 저장합니다. 구조체는 점, 색상 또는 크기와 같은 간단한 데이터 유형을 표현하는 데 자주 사용됩니다. 또한 사용자가 만든 사용자 지정 데이터 유형과 같이 더 복잡한 데이터 유형을 나타내는 데에도 사용할 수 있습니다. 2. 구조체의 특징 값 유형: 구조체는 값 유형이므로 선언된 메모리 위치에 직접 저장됩니다. 구조체 변수가 다른 구조체 변수에 할당되거나 메서드 인수로 전달되면 전체 구조체 데이터의 복사본이 만들어집니다. 메모리 할당: 구조체는 일반적으로..

공부/C# 2023.06.13

리플렉션(Reflection)이란?

1. 리플렉션이란? C#에서 리플렉션은 런타임에 프로그램이 자체 구조를 검사하고 조작할 수 있는 강력한 기능입니다. 리플렉션은 어셈블리의 유형, 클래스, 메서드, 속성 및 기타 멤버에 대한 메타데이터를 얻고 해당 메타데이터를 기반으로 동적 작업을 수행할 수 있는 방법을 제공합니다. 2. 리플렉션의 특징 메타데이터 액세스: 리플렉션을 사용하면 런타임에 프로그램의 유형 및 멤버에 대한 메타데이터 정보에 액세스할 수 있습니다. 메타데이터에는 클래스 이름, 메서드 서명, 속성 이름, 속성 정보 등과 같은 세부 정보가 포함됩니다. 유형 검색: 리플렉션을 사용하면 어셈블리 내에서 유형을 동적으로 검색하고 분석할 수 있습니다. 클래스, 인터페이스, 구조체, 열거형 및 해당 멤버(메서드, 속성, 필드, 이벤트 등)에 ..

공부/C# 2023.06.10

람다식(Lambda)이란?

1. 람다식이란? C#에서 람다 표현식은 별도의 명명된 메서드를 명시적으로 정의하지 않고 인라인으로 델리게이트 또는 표현식을 생성하는 데 사용할 수 있는 익명 함수입니다. 람다 표현식은 작고 독립적인 코드 블록을 정의하고 사용하기 위한 간결한 구문을 제공합니다. 람다 표현식은 주로 LINQ 쿼리, 이벤트 핸들러 및 익명 메서드에서 자주 사용됩니다. 2. 람다식의 특징 익명 함수: 람다 표현식은 이름이 연결되어 있지 않으므로 익명 함수입니다. 이를 통해 별도의 메서드 선언 없이도 코드 블록을 인라인으로 정의할 수 있습니다. 구문: 람다 식의 구문은 람다 연산자(=>)와 입력 매개변수 목록(있는 경우), 식 또는 문 블록으로 구성됩니다. 한 줄 표현식의 경우 구문은 다음과 같습니다: (입력 매개변수) => ..

공부/C# 2023.06.10

C#에서 클래스(Class)와 구조체(Struct)의 차이점

C#에서는 클래스(Class)와 구조체(Struct) 모두 사용자 지정 데이터 유형을 정의하는 데 사용됩니다. 그러나 둘 사이에는 몇 가지 주요 차이점이 있습니다: 상속: 클래스(Class)는 다른 클래스로부터 프로퍼티와 메서드를 상속할 수 있는 반면, 구조체(Struct)는 다른 구조체나 클래스로부터 상속할 수 없습니다. 즉, 클래스(Class)는 복잡한 상속 계층 구조와 다형성 동작을 구현하는 데 사용할 수 있는 반면 구조체(Struct)는 일반적으로 더 간단하고 가벼운 데이터 구조에 사용됩니다. 메모리 할당: 클래스(Class)의 인스턴스는 힙에 할당되는 반면 구조체(Struct)의 인스턴스는 스택에 할당됩니다. 즉, 클래스(Class)는 메모리 사용량과 가비지 컬렉션 측면에서 오버헤드가 더 높지만..

공부/C# 2023.04.07

평면과 구의 충돌을 어떻게 판단하는가?

Unity 게임 엔진에서 평면과 구체가 충돌하는지 확인하려면 다음과 같은 방법을 사용할 수 있습니다: 구체의 중심에서 평면까지의 거리를 구합니다. 이 거리가 구체의 반지름보다 작거나 같은지 확인합니다. 만약 거리가 구의 반지름보다 작거나 같으면 구가 평면과 교차하는 것입니다. 다음은 Unity의 C# 코드에서 이러한 단계를 구현하는 방법의 예시입니다: public bool SphereIntersectsPlane(Vector3 sphereCenter, float sphereRadius, Plane plane) { // Get the distance from the center of the Sphere to the Plane float distance = plane.GetDistanceToPoint(sphe..

공부/C# 2023.03.17

레이캐스트(Raycast)로 평면과 충돌했는지 어떻게 판단할가?

Unity 게임 엔진에서 레이캐스트가 평면과 충돌했는지 확인하려면 다음 단계를 사용하면 됩니다: 충돌을 확인하려는 오브젝트의 위치에서 시작하여 한 방향으로 확장되는 레이 오브젝트를 생성합니다. Physics.Raycast() 메서드를 사용하여 충돌을 확인하려는 방향으로 레이를 형변환합니다. 이 메서드는 콜리전 발생 여부를 나타내는 부울 값을 반환합니다. 콜리전이 발생한 경우 Physics.Raycast() 메서드가 반환하는 RaycastHit 오브젝트의 hit.collider 프로퍼티를 확인하여 평면 콜리더인지 확인합니다. 콜리더 프로퍼티는 레이에 부딪힌 콜리더 오브젝트를 반환합니다. 다음은 C# 에서 충돌 여부를 확인하는 방법에 코드입니다. public bool HasCollidedWithPlane(V..

공부/C# 2023.03.17

평면과 한 점의 최단거리를 어떻게 구할까?

Unity 게임 엔진에서 평면과 점 사이의 최단 거리를 찾기 위해서는 다음 단계를 사용하면 됩니다: 평면의 법선 벡터를 구합니다. 평면의 법선 프로퍼티를 사용하거나 평면에 놓인 두 평행하지 않은 벡터의 교차 곱으로 계산할 수 있습니다. 점과 평면의 한 점 사이의 벡터를 계산합니다. 평면상의 모든 점의 위치 벡터에서 점의 위치 벡터를 빼면 이 작업을 수행할 수 있습니다. 점과 평면 사이의 벡터를 평면의 법선 벡터에 투영합니다. 두 벡터의 도트 곱을 사용하여 이 작업을 수행할 수 있습니다. 결과 벡터는 점과 평면 사이의 최단 거리입니다. 이 벡터의 크기를 계산하여 거리를 구할 수 있습니다. 다음은 C# 에서 최단거리를 구하는 코드입니다. public float ShortestDistanceBetweenPoi..

공부/C# 2023.03.17

드로우콜(DrawCall)을 줄이는 방법

드로우콜 수를 줄이는 것은 Unity 게임 또는 애플리케이션의 성능을 최적화하는 데 중요합니다. 다음은 드로우콜 수를 줄이는 데 사용할 수 있는 몇 가지 기법입니다: 메시 배칭 사용: Unity에는 여러 메시를 하나의 메시로 결합하여 렌더링에 필요한 드로우콜 수를 줄일 수 있는 스태틱 배칭 및 다이내믹 배칭이라는 기능이 내장되어 있습니다. 스태틱 배칭은 움직이거나 변경되지 않는 오브젝트에 유용하고, 동적 배칭은 움직이거나 변경되는 오브젝트에 유용합니다. Unity 에디터에서 게임 오브젝트를 선택하고 정적 또는 동적으로 표시하여 이러한 기능을 활성화할 수 있습니다. LOD(레벨 오브 디테일) 시스템 사용: LOD 시스템을 사용하면 카메라에서 멀리 떨어진 오브젝트에 대해 단순화된 버전의 메시를 생성하여 버텍..

공부/C# 2023.03.13

절두체 컬링(Frustum Culling)이란?

1. 프러스텀 컬링(=절두체 컬링, Frustum Culling)이란? 프러스텀 컬링은 컴퓨터 그래픽과 게임 개발에서 씬의 오브젝트가 카메라 뷰 프러스텀(카메라에 보이는 공간의 일부)의 안쪽인지 바깥쪽인지 결정하는 데 사용되는 기법입니다. 이 기술은 카메라에 실제로 보이는 오브젝트만 렌더링하고 프러스텀 외부에 있는 오브젝트는 버림으로써 렌더링을 최적화하는 데 사용됩니다. 카메라의 뷰 프러스텀은 카메라 위치에서 먼 평면까지 확장되는 3D 피라미드 모양의 볼륨으로, 카메라의 위치는 피라미드의 정점에 위치합니다. 프러스텀은 6개의 평면(왼쪽, 오른쪽, 위, 아래, 근거리, 원거리)으로 정의되며, 각 평면은 프러스텀의 경계 평면을 나타냅니다. 이러한 평면은 카메라에 표시되는 공간의 경계를 정의하며, 이러한 평면..

공부/C# 2023.03.11

오클루전 컬링(Occlusion Culling)이란?

1. 오클루전 컬링(Occlusion Culling)이란? 오클루전 컬링은 컴퓨터 그래픽 및 비디오 게임 개발에서 렌더링해야 하는 오브젝트의 수를 줄여 렌더링 성능을 개선하는 데 사용되는 기술입니다. 기본 아이디어는 카메라에 보이지 않거나 다른 오브젝트에 가려진 오브젝트를 렌더링하지 않도록 하여 리소스를 절약하고 프레임 속도를 개선하는 것입니다. 2. 오브젝트의 표시 오클루전 컬링을 수행하려면 시스템에서 어떤 오브젝트가 표시되고 어떤 오브젝트가 표시되지 않는지 결정해야 합니다. 이는 다음과 같은 다양한 방법을 사용하여 수행할 수 있습니다: 1. 프러스텀 컬링: 여기에는 오브젝트가 카메라의 뷰 프러스텀(카메라에 보이는 공간의 일부) 내에 있는지 여부를 확인하는 작업이 포함됩니다. 프러스텀 밖에 있는 오브젝..

공부/C# 2023.03.11

Distance() 함수와 Magnitude() 함수 보다 왜 sqrMagnitude() 함수가 빠를까?

C#의 sqrMagnitude() 함수는 다른 두 함수에 필요한 값비싼 제곱근 연산을 피할 수 있기 때문에 Distance() 및 Magnitude() 함수보다 빠릅니다. Distance() 함수는 피타고라스 정리를 사용하여 두 벡터 사이의 거리를 계산하는데, 두 벡터의 구성 요소 간 차이의 제곱합의 제곱근을 구하는 것이 포함됩니다. Magnitude() 함수는 벡터의 크기(또는 길이)를 계산하는데, 이 역시 벡터의 구성 요소 제곱의 합의 제곱근을 구하는 방식으로 수행됩니다. 이와는 대조적으로 sqrMagnitude() 함수는 단순히 벡터의 제곱 크기를 계산하는데, 이는 벡터의 구성 요소 제곱의 합과 같습니다. 이렇게 하면 다른 두 함수에 필요한 값비싼 제곱근 연산을 피할 수 있습니다.제곱근 연산을 피하..

공부/C# 2023.03.11

메카님 애니메이션(Mecanim Animation)이란?

1. 메카님 애니메이션(Mecanim Animation)이란? Unity에서 게임 캐릭터와 오브젝트의 애니메이션을 제작하는 가장 일반적인 방법은 메카님 애니메이션 시스템을 사용하는 것입니다. 메카니즘은 복잡하고 반응성이 뛰어난 애니메이션을 제작할 수 있는 다양한 기능을 제공하는 강력한 애니메이션 툴입니다. 메커니즘은 캐릭터가 수행할 수 있는 다양한 움직임이나 동작을 나타내는 일련의 애니메이션 상태를 정의하는 방식으로 작동합니다. 그런 다음 이러한 상태를 캐릭터가 한 상태에서 다른 상태로 이동해야 하는 시기와 방법을 지정하는 트랜지션과 함께 연결할 수 있습니다. 메커니즘의 주요 기능 중 하나는 여러 애니메이션 상태 간의 블렌딩을 지원한다는 점입니다. 이를 통해 서로 다른 움직임이나 동작 간에 부드럽게 전환..

공부/C# 2023.03.06

레거시 애니메이션(Lagacy Animation)이란?

1. 레거시 애니메이션이란? Unity에서 '레거시 애니메이션'은 더 유연하고 새로운 '애니메이터' 시스템이 도입되기 전에 사용되었던 특정 애니메이션 시스템을 의미합니다. 레거시 애니메이션 시스템은 Unity에서 계속 지원되지만, 일반적으로 개발자는 가급적 최신 애니메이터 시스템을 사용하는 것이 좋습니다. Unity의 레거시 애니메이션 시스템은 각 애니메이션 오브젝트 또는 캐릭터에 대해 일련의 키프레임을 정의하는 방식으로 작동합니다. 이러한 키프레임은 특정 시점에 오브젝트의 위치, 회전, 스케일을 지정합니다. 그런 다음 애니메이션 시스템은 이러한 키프레임 사이를 보간하여 부드러운 모션의 모양을 만듭니다. Unity의 레거시 애니메이션 시스템은 기본적인 움직임과 애니메이션 간 전환이 포함된 간단한 애니메이..

공부/C# 2023.03.06

쿼터니언(Quaternions)이란?

1. 쿼터니언(Quaternions)이란? 쿼터니언은 3D 공간에서 회전과 방향을 표현하는 데 사용할 수 있는 수학적 구조입니다. 19세기 중반 아일랜드의 수학자 윌리엄 로완 해밀턴 경이 처음 발견했습니다. 쿼터니언은 q = w + xi + yj + zk로 나타낼 수 있는 4차원 수로, 여기서 w, x, y, z는 실수이고, i, j, k는 i^2 = j^2 = k^2 = ijk = -1 관계를 만족하는 단위 허수입니다. 회전을 표현하는 데 유용한 쿼터니언의 핵심 속성은 회전을 구성하는 데 해당하는 방식으로 함께 곱할 수 있다는 것입니다. 구체적으로, 회전을 나타내는 두 개의 쿼터니언인 q1과 q2가 있다면, 이들의 곱인 q1 * q2는 해당 회전의 구성을 나타냅니다. 오일러 각과 같은 다른 회전 표현에..

공부/C# 2023.03.06

오일러 각(EulerAngles)이란?

1. 오일러 각(EulerAngles)이란? 오일러 각은 세 개의 각도 집합을 사용하여 3D 공간에서 물체의 방향 또는 회전을 표현하는 방법입니다. 18세기에 이 개념을 개발한 수학자 레오나르드 오일러의 이름을 따서 명명되었습니다. 2. 오일러 각(EulerAngles)의 구성요소 오일러 각을 구성하는 세 각은 일반적으로 그리스 문자 파이(φ), 세타(θ), 피시(ψ)로 표시됩니다. 이러한 각도는 일반적으로 x, y, z 축이라고 하는 세 개의 수직축에 대한 회전을 나타내는 데 사용됩니다. 세 가지 회전이 적용되는 순서를 정의하는 데는 여러 가지 규칙이 있으며, 이에 따라 오일러 각의 집합이 달라집니다. 가장 일반적인 규칙은 XYZ, YXZ, ZYX 및 ZXZ 규칙이지만 다른 규칙도 많이 있습니다. 3...

공부/C# 2023.03.06

짐벌락(gimbal lock)이란?

1. 짐벌락(gimbal lock)이란? 짐벌 락은 3D 그래픽에서 발생하는 현상으로, 특히 오일러 각을 사용하여 3차원 공간에서 물체의 방향을 나타낼 때 발생합니다. 오일러 각은 세 개의 축에 대한 물체의 회전을 고정된 순서로 나타내는 세 개의 각도 집합입니다. 그러나 물체의 방향이 특정 구성에 도달하면 한 자유도를 잃게 되어 물체의 방향이 특정 구성에 "고정"된 것처럼 보일 수 있습니다. 이를 짐벌 락이라고 합니다. 짐벌 락은 세 개의 회전축 중 두 개의 회전축이 정렬될 때 발생하며, 시스템의 복잡성을 효과적으로 줄이고 2차원 시스템처럼 작동하도록 합니다. 이 구성에서는 세 번째 축이 무의미해지고 시스템의 자유도가 한 단계 낮아집니다. 그 결과 물체의 방향이 더 이상 세 개의 오일러 각으로 고유하게 ..

공부/C# 2023.03.06

Yield 키워드란?

1. Yield 키워드란? C#과 Unity에서 yield 키워드는 코루틴과 함께 사용하여 고급 제어 흐름과 비동기 실행을 가능하게 합니다. yield 키워드를 사용하면 메서드가 호출자에게 값을 반환하되 메서드를 완전히 종료하지 않고도 반환할 수 있습니다. 반환 키워드를 코루틴에 사용하면 코루틴 실행을 일시 중지하고 호출 메서드에 제어권을 반환하여 코루틴이 계속되기 전에 다른 코드가 실행될 수 있도록 할 수 있습니다. 2. Yield 키워드와 함께 사용되는 다양한 코루틴 문법 다음은 Unity 코루틴에 사용되는 가장 일반적인 yield 문 몇 가지입니다: yield return null;: 이 문은 코루틴을 한 프레임 동안 일시 중지하여 계속하기 전에 다른 코드를 실행할 수 있도록 합니다. 이는 프레임 ..

공부/C# 2023.03.06

코루틴(coroutines)이란?

1. 코루틴(coroutines)이란? C#과 Unity에서 코루틴은 비동기, 시간 경과에 따라 또는 작은 단계로 실행되는 코드를 생성하는 데 사용할 수 있는 특수한 유형의 반복자 메서드입니다. 코루틴을 사용하면 복잡한 다단계 작업을 더 작은 코드 조각으로 분할하여 독립적으로 실행하고 보다 제어된 방식으로 실행할 수 있습니다. 2. 코루틴(coroutines)의 예시 다음은 C# 코루틴의 예시입니다: using System.Collections; using UnityEngine; public class Example : MonoBehaviour { private IEnumerator coroutine; void Start() { coroutine = MyCoroutine(); StartCoroutine(..

공부/C# 2023.03.06

이벤트(event)란?

1. 이벤트(event)란? C#에서 이벤트 키워드는 객체 간의 통신 메커니즘인 이벤트를 선언하는 데 사용됩니다. 이벤트를 통해 객체는 다른 객체에 어떤 일이 발생했음을 알리고, 다른 객체가 이벤트에 응답할 수 있는 기회를 제공할 수 있습니다. 2. 이벤트(event)의 예제 다음은 C#에서 이벤트를 선언하고 사용하는 예제입니다: public class MyClass { public event EventHandler MyEvent; public void DoSomething() { // ... // Raise the event MyEvent?.Invoke(this, new MyEventArgs("hello")); } } public class MyEventArgs : EventArgs { public s..

공부/C# 2023.03.06
반응형