[Unity, C#] SOLID 원칙
·
Unity,C#/Unity 정보
■ SOLID 원칙프로그래밍에서 널리 사용되는 디자인 패턴(Design Patterns)은 Gang of Four(GOF) 라 불리는 4명의 저자가 정리한 책에서 시작되었다. 디자인 패턴을 공부해본 사람이라면 알겠지만, 대부분의 책은 SOLID 원칙부터 소개하고, 대부분의 디자인 패턴 역시 이 SOLID 원칙을 준수하도록 설계되어 있다. ▶ SOLID 원칙Single responsibility : 단일 책임 원칙Open-closed : 개방-폐쇄 원칙Liskov substitution : 리스코프 치환 원칙Interface segregation : 인터페이스 분리 원칙Dependency inversion : 의존 역전 원칙위 5가지 원칙의 앞 글자를 따서 “SOLID” 원칙이라 부른다. 물론 실제 프로그..
[Unity] UI Toolkit 기본 사용법
·
Unity,C#/Unity 정보
■ UI ToolkitUI Toolkit은 Unity 2022.2 이후 유니티의 기존 UGUI(Canvas 기반 UI)를 대체할 수 있도록 개발된 새로운 공식 UI 시스템이다. 기존 UGUI는 GameObject 기반으로 동작하는 UI 시스템으로 드래그 앤 드롭을 통한 직관적인 UI 제작이 가능하다. 또한 하이어라키 구조와 Canvas의 SortOrder를 이용해 UI의 렌더링 순서를 제어할 수 있다.UGUI는 편리하고 직관적인 반면에 아래와 같은 뚜렷한 단점도 존재한다.구분단점 GameObject 기반 UGUI의 모든 UI요소는 GameObject + Component 로 구성된다. → 따라서 많은 UI요소가 있으면 UpdateLoop, Transform 갱신 등 CPU 오버헤드와메모리 사용량이 커..
[C++, 자료구조] stack의 응용 : 계산기 프로그램
·
C++/자료구조
■ stack의 응용 : 계산기 프로그램$$ 1 + (2+3) / 4 $$스택을 사용하여 계산기를 구현해 보자. 계산기는 아래의 두 가지를 고려해서 연산을 진행할 수 있어야 한다.소괄호를 파악하여 그 부분을 먼저 계산한다.연산자의 우선순위를 근거로 연산의 순위를 결정한다.물론 스택만 사용해서 구현할 수 있는것은 아니고 별도의 알고리즘이 존재하며 이를 활용해야 계산기 프로그램을 만들 수 있다.▶ 전위(prefix), 중위(infix), 후위(postfix) 표기법먼저 수식을 이루는 피연산자가 한자리 숫자로만 이뤄진다고 가정해 보자. 전위, 중위, 후위 표기법은 수학식에서 연산자(operator)를 피연산자(operand) 들 사이 어디에 두느냐에 따른 표기 방식의 차이를 말한다.중위 표기법 (Infix N..
[C++, 자료구조] 스택(Stack)
·
C++/자료구조
■ 스택(Stack)스택(Stack) 자료구조는 실 생활에서도 자주 볼 수 있는 상황으로 예를 들 수 있다. 쌓인 상자나 프링글스 통 안의 감자칩처럼, 가장 아래에 있는 물건을 꺼내기 위해선 그 위에 있는 물건을 먼저 꺼내야 한다. 따라서 스택은 “가장 나중에 들어간 것이 가장 먼저 나온다.(LIFO : Last-In, First Out)” 라는 후입선출 방식의 자료구조이다. ▶ 스택의 추상 자료형앞서 살펴본 리스트 자료구조의 추상자료형은 필요에 따라 정의 내용이 차이가 있었다. 하지만 스택의 추상 자료형은 상대적으로 정형화된 편이다. 한쪽이 막혀 있는 프링글스 통을 가지고 할 수 있는 일을 정리해 보면 아래와 같다.프링글스 통에 감자칩을 넣는다 : push프링글스 통에서 감자칩을 꺼낸다 : pop제일 ..
[게임수학] 9-3. 외적(3) - 삼중곱
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.■ 삼중곱벡터의 외적과 내적을 두 번 연속 사용하는 연산을 삼중곱(Triple product)이라 한다.삼중곱 식을 세우려면 3개의 벡터$(\vec u, \vec v, \vec w)$ 가 필요하며, 순서에 따라 다음과 같은 경우의 수가 생긴다.$\vec u\cdot(\vec v \cdot \vec w)$$\vec u\cdot(\vec v \times \vec w)$$\vec u \times (\vec v\cdot \vec w)$$\vec u \times (\vec v\times \vec w)$이 중, 1번 연산은 괄호 안의 내적 값은 스칼라가 되어 벡터를 세 번 곱했다고 보기 어렵고, 3번 연산은 벡터와 스칼라의 외적은 불가능하다.따라서 2번과 ..
[게임수학] 9-2. 외적(2) - 카메라의 회전 행렬, 로드리게스 공식
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다. ■ 벡터로부터 회전행렬 생성위와 같이 3차원 공간에서 좌우로 기울어지지 않는 카메라가 아래에 위치한 물체를 바라보고 있는 상황을 설정해 보자.앞서 다룬 오일러 각 방식을 사용해 카메라의 회전을 지정할 수 있지만, 외적을 사용하면 카메라의 시선 벡터로부터 3개의 로컬 축을 구하고 이를 통해 회전 행렬을 얻어낼 수 있다. 1. 카메라의 로컬 z 축 계산물체의 위치에서 카메라의 위치를 뺀 후 크기를 1로 정규화시킨 벡터$\vec v$를 생성하면, 이 벡터는 카메라 트랜스폼의 로컬 $z$축이 된다. 2. 카메라의 로컬 x, y 축 계산월드 공간의 $y$축 벡터를 $\vec u$로 표시하고, 앞서 구한 로컬 $z$축과 외적 한 후 정규화시키면 카메라의..
[게임수학] 9-1. 외적(Cross product)
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다. ■ 벡터의 외적(Cross product)벡터의 외적(Cross product)은 내적과 달리 오로지 3차원 공간의 벡터에만 사용 가능한 연산이다.벡터의 외적은 $\times$기호를 사용하며, 두 3차원 벡터 $\vec u, \vec v$의 외적 결과는 아래와 같다.$$ \vec u = (u_x, u_y, u_z) \ \ \ \vec v = (v_x, v_y, v_z) \\ \vec u \times \vec v = (u_yv_z - v_yu_z, u_zv_x -v_xu_z,u_xv_y -v_xu_y) $$[두 벡터의 외적 결과]두 3차원 벡터의 외적 결과는 언제나 3차원 벡터이다.계산식 패턴은 $x$성분의 결과를 만들기 위해 관련없는 나머지 두..
[C++, 자료구조] 양방향 연결 리스트(Doubly Linked List)
·
C++/자료구조
■ 양방향 연결 리스트양방향 연결 리스트는 하나의 노드가 자신의 왼쪽(이전)과 오른쪽(다음) 노드를 동시에 가리키는 구조이다.양방향 리스트이면서, 원형 연결 리스트를 동시에 지니는 리스트도 존재한다.그림만 보면 양방향 리스트의 구현은 어려워 보이지만, 양쪽 방향으로 이동할 수 있기 때문에 단방향에서 어렵게 구현했던 것이 쉽게 구현되기도 한다. 양방향 리스트 역시 끝을 가리키는 Tail노드를 사용하지 않고 데이터를 맨 앞에 추가하는 방식으로 구현해 보겠다. ■ 추상 자료형 정의#pragma oncetypedef int LData;struct Node{ LData data; Node* prev = nullptr; Node* next = nullptr;};struct DoublyLinkedList{ Node*..
[C++, 자료구조] 단일 연결 리스트(Singly Linked List)
·
C++/자료구조
■ 연결 리스트(Linked List)배열은 메모리에 연속적으로 저장되며 크기가 고정되는 “정적 메모리 구조”이기 때문에, 한번 생성된 후에는 길이를 직접 변경할 수 없다.정확히 말하면 길이를 늘일 수 없는 것이 아닌, 더 큰 배열을 새로 생성한 뒤 기존 데이터를 모두 복사해야 하므로 비효율적이다.그래서 필요할 때마다 데이터를 저장할 수 있는 “노드(연결이 가능한 객체)”를 동적 할당하여 이들을 연결한 것이 바로 연결 리스트이다.즉, 처음 데이터는 그 다음그다음 데이터가 저장된 위치를 가리키고, 다음 데이터는 그다음 데이터의 위치를 가리킨다.연결하는 방식에 따라서 연결 리스트도 여려 종류가 존재한다. 하나씩 천천히 살펴보도록 하자. ■ 단일 연결 리스트(Singly Linked List)단일 연결 리스트..